Akshay
Akshay

Reputation: 37

Map json object to java object (but my json object variables has first letter capital)

I have a third party API that gives response as JSON object whose variables has first letter capital My JSON object looks like this:

{
   "ApiStatus":{
      "ApiStatusCode":5000,
      "ApiMessage":"OK",
      "FWStatusCode":0,
      "FWMessage":""
   },
   "Encounter":{
      "EncounterId":"hgasfdjsdgkf",
      "ApiLinks":[
         {
            "Title":"Self",
            "Description":"Self referencing api",
            "ResourceName":"self",
            "HttpMethods":[
               "GET",
               "DELETE"
            ],
            "URL":"http://www.google.com/api/v2/test/test2/hchvjh"
         },
         {
            "Title":"Transmit a Report",
            "Description":"Create a report and transmit it.",
            "ResourceName":"transmitter",
            "HttpMethods":[
               "POST"
            ],
            "URL":"http://www.google.com/api/v2/test3/test3/jydgfkshd/transmitter"
         }
      ]
   }
}

As you can see above variable's first letter is capital and need to map that in My java object class, so when I tried to use ObjectMapper, but it's not working.

MyJavaObject object = new ObjectMapper().readValue(jsonObject, MyJavaObject.class);

Any Suggestion or help would be great.

Upvotes: 0

Views: 2576

Answers (1)

João Dias
João Dias

Reputation: 17460

You need to set the default naming strategy for Jackson to be UpperCamelCaseStrategy as follows:

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setPropertyNamingStrategy(PropertyNamingStrategy.UpperCamelCaseStrategy);
MyJavaObject object = objectMapper.readValue(jsonObject, MyJavaObject.class);

For the properties URL, FWStatusCode and FWMessage, which do not follow camel case, snake case or any other naming strategy, you will you need to use @JsonProperty on your class attributes so that Jackson knows how to handle them. Just annotate the class attribute with the respective @JsonProperty and it will work:

  • @JsonProperty("URL")
  • @JsonProperty("FWStatusCode")
  • @JsonProperty("FWMessage")

Upvotes: 1

Related Questions