Model class for Jackson Parser to parse Uppercase

2020-04-03 17:15发布

问题:

I have a json file which looks like this:

{
    "ANIMALS": {
    "TYPE": "MAMMAL",
    "COLOR": "BLACK",
    "HEIGHT": "45",

    }
}

But I get property not found error. If I change it to animals(lowercase). it works fine. Can anyone suggest me the model class for this sample json file which will get parsed correctly.

回答1:

You should implement new naming strategy for your case:

class LowerCaseNamingStrategy extends LowerCaseWithUnderscoresStrategy {

    private static final long serialVersionUID = 1L;

    @Override
    public String translate(String arg0) {
        return arg0.toUpperCase();
    }
}

After that, configure ObjectMapper

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setPropertyNamingStrategy(new LowerCaseNamingStrategy());

See also @JsonProperty annotation.

  • Change field case with an ObjectMapper


回答2:

Building off of Deepak's answer, depending on how you have Jackson configured, you may need to put the @JsonProperty on the getters & setters instead of the property or you might get duplicate properties in the resulting JSON.

Example

 @JsonProperty("ANIMALS")
 private string animals;

Results in...{animals:"foo",ANIMALS:"foo"}

 private string animals;

 @JsonProperty("ANIMALS")
 public String getAnimals(){...}

Results in...{ANIMALS:"foo"}



回答3:

Thanks I solved this issue using @JsonProperty annotation

    @JsonProperty("ANIMALS")
    private string animals;


回答4:

If you are not generating the JSON (serialisation), but you want to consume an object without having to care about the case.

You can receive Animal or AniMal :

ObjectMapper mapper = new ObjectMapper();
mapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true);