使用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
JSONProperty
注释(我更喜欢的next XMLElement
是一个用于XJC的自定义名称生成器,如this Stackoverflow answer中所述。我是不是错过了显而易见的事情?谢谢你的想法。
https://stackoverflow.com/questions/21995175
复制相似问题