Home > Back-end >  Map json object to java object (but my json object variables has first letter capital)
Map json object to java object (but my json object variables has first letter capital)

Time:12-15

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.

CodePudding user response:

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")
  • Related