首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Jackson和JAXB之间使用下划线和camelCase字段的Umarshall对象

在Jackson和JAXB之间使用下划线和camelCase字段的Umarshall对象
EN

Stack Overflow用户
提问于 2014-02-25 01:51:14
回答 2查看 15K关注 0票数 20

使用JAXB (2.2)和Jackson (1.9.13),我在将以下JSON对象解组到POJO时遇到了问题

{
   "userId": "foo",
   "group_id": "bar"
}

请注意,有效负载包含一个camelCase和一个下划线字段。

xjc为我的XML模式生成的POJO如下所示:

public class User {
    @XmlElement(required = true)
    protected String userId;
    @XmlElement(name = "group_id", required = true)
    protected String groupId;

    public String getUserId() { return userId; }       
    public void setUserId(String value) { this.userId = value; }
    public String getGroupId() { return groupId; }
    public void setGroupId(String value) { this.groupId = value; }
}

Jackson失败了,但有以下例外:

org.codehaus.jackson.map.exc.UnrecognizedPropertyException: Unrecognized field "group_id"

我到目前为止所做的尝试都失败了

1.使用JAXB绑定underscoreBinding="asCharInWord"

在我的XML模式中使用以下JXB绑定

<jxb:globalBindings underscoreBinding="asCharInWord"/>

生成以下POJO:

public class User {
    @XmlElement(required = true)
    protected String userId;
    @XmlElement(name = "group_id", required = true)
    protected String groupId;

    public String getUserId() { return userId; }
    public void setUserId(String value) { this.userId = value; }
    public String getGroup_Id() { return groupId; }
    public void setGroup_Id(String value) { this.groupId = value; }
}

注意,JAXB现在生成了带有下划线的组is的setter/getter,但是group_id字段仍然被转换为CamelCase。Jackson的对象映射器似乎忽略了属性的setter/setter名称,并且仍然不能将group_id映射到groupId

2. Jackson属性命名策略

使用Jackson的PropertyNamingStrategy CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES,我可以将group_id转换为groupId,但是现在对象映射器在userId JSON属性上失败了。

3.向groupId添加JSONProperty注释

向普通的JAXB生成的POJO添加JSONProperty实际上是可行的

public class User {
        /* ... */
        @XmlElement(name = "group_id", required = true)
        @JSONProperty("group_id")
        protected String groupId;
        /* ... */
   }

然而,我的XML模式很庞大,手动插装生成的类是不可行的,因为我们经常生成我们的类。

我该怎么办?

我看到了以下两个剩余的选项来处理这个问题:

XJC

  • 实现了一个JAXB插件,该插件为每个XJC添加一个带有下划线名称的JSONProperty注释(我更喜欢的next XMLElement是一个用于XJC的自定义名称生成器,如this Stackoverflow answer中所述。

我是不是错过了显而易见的事情?谢谢你的想法。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21995175

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档