8

我有一个看起来像这样的 json 文件:

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

    }
}

但我得到属性未找到错误。如果我将其更改为动物(小写)。它工作正常。谁能建议我这个示例 json 文件的模型类,它将被正确解析。

4

4 回答 4

13

根据 Deepak 的回答,根据您配置 Jackson 的方式,您可能需要将@JsonPropertygetter 和 setter 放在 getter 和 setter 上而不是属性上,否则您可能会在生成的 JSON 中获得重复的属性。

例子

 @JsonProperty("ANIMALS")
 private string animals;

结果是...{animals:"foo",ANIMALS:"foo"}

 private string animals;

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

结果是...{ANIMALS:"foo"}

于 2015-10-01T15:27:19.897 回答
9

您应该为您的案例实施新的命名策略:

class UpperCaseNamingStrategy extends PropertyNamingStrategy.PropertyNamingStrategyBase {

    private static final long serialVersionUID = 1L;

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

之后,配置ObjectMapper

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

另见@JsonProperty注解。

于 2013-05-22T07:18:19.197 回答
3

谢谢我使用@JsonProperty 注释解决了这个问题

    @JsonProperty("ANIMALS")
    private string animals;
于 2013-05-22T07:21:21.667 回答
1

如果您不生成 JSON(序列化),但您想使用对象而不必关心大小写。

您可以收到 Animal 或 AnMal :

ObjectMapper mapper = new ObjectMapper();
mapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true);    
于 2019-07-22T20:41:56.677 回答