json文件中的Camel Case属性名称没有映射到Java对象



我有一个json对象,其属性名为:itemsRequiredsortable_list。在我的ObjectMapper中,我有

mapper.setPropertyNamingStrategy(PropertyNamingStrategy.CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES);

通过此操作,sortable_list被映射到POJO中的适当属性,但itemsRequired被忽略。而如果我去掉PropertyNamingStrategy,那么itemsRequired起作用,而sortable_list不起作用。如果我想让两者一起工作,该怎么办?

我正在使用fasterxml-lib。我也试过考德豪斯的杰克逊,结果也一样。


更新:POJO如下,

@JsonIgnoreProperties(ignoreUnknown = true)
@JsonInclude(Include.NON_NULL)
public class CreateList extends Header {
    private String question;
    private String placeholder;
    private String help;
    private int itemsRequired;
    private List<String> list;
    // Getter and Setter methods
}

JSON是

"create": {
    "heading": "Activities Available to You",
    "question": "List at least four activities at school and in your community that you may want to try out.n",
    "placeholder": "List an activity",
    "help": "You can only have 10 list items",
    "list": [],
    "items_required": 4
  }

如果我有上面的JSON,一切都很好。但当我将JSON更改为时,事情就不起作用了

"create": {
    "heading": "Activities Available to You",
    "question": "List at least four activities at school and in your community that you may want to try out.n",
    "placeholder": "List an activity",
    "help": "You can only have 10 list items",
    "list": [],
    "itemsRequired": 4
  }

itemsRequired在后一种情况下被忽略。

我希望它在这两种情况下都能工作,无论它是命名为items_required还是itemsRequired

根据建议,您可能应该对不想修改的条目使用显式注释。我不知道为什么上面的代码不起作用:它似乎应该起作用。您使用Jackson 2.x版本(com.fasterxml包)也是正确的;尝试使用旧的1.x版本没有任何好处。

您可能需要提交一份错误报告:这可能是一个错误。但要知道这一点,需要一些示例代码;也许这个问题还有另一种解释。

您可以使用@JsonProperty。如果你不喜欢在目标类中添加注释的想法,你可以使用Mixin,如果你想把它们作为snake大小写和其他camelCase的话。因为Mixin允许你在不进行实际编辑的情况下向类中添加属性名目标阶级,主要是在第三方阶级的情况下。

但我更喜欢自定义命名策略

由于它允许您拥有可以解析两者并将在ObjectMapper中注册的策略,这将帮助您避免维护mixin、JsonProperty等。

相关内容

  • 没有找到相关文章

最新更新