json文件中的Camel Case属性名称未映射到Java Object

时间:2013-08-22 22:10:11

标签: json jackson fasterxml

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

mapper.setPropertyNamingStrategy(PropertyNamingStrategy.CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES);

将此sortable_list映射到POJO中的相应属性,但忽略itemsRequired。如果我删除了PropertyNamingStrategy,那么itemsRequired可以正常工作而sortable_list则无效。如果我想要两者一起工作应该怎么做?

我正在使用fasterxml lib。我也尝试过codehaus的杰克逊,结果相同。


更新: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

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

您可以使用@JsonProperty。如果你不喜欢向目标类添加注释,你可以总是使用Mixins,如果你想要几乎没有它们作为蛇案例和其他camelCase.Since mixins允许你添加属性名称到类而不实际编辑 目标类,主要是第三方类。

但我会考虑custom naming strategy

因为它允许你拥有可以解析这两个并将在ObjectMapper中注册的策略,它将帮助你避免维护mixins,JsonProperty等。