- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
使用 JAXB (2.2) 和 Jackson (1.9.13),我无法将以下 JSON 对象解码到我的 POJO
{
"userId": "foo",
"group_id": "bar"
}
请注意,有效负载包含驼峰命名法和下划线字段。
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"
underscoreBinding="asCharInWord"
在我的 XML 架构中使用以下 JXB 绑定(bind)
<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 现在为组 ID 生成带下划线的 setter/getter,但 group_id
字段仍转换为 CamelCase。 Jackson 的对象映射器似乎忽略了属性 getter/setter 名称,并且仍然无法映射 group_id
至groupId
.
使用 Jackson 的 PropertyNamingStrategy CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES
我可以转换group_id
至groupId
,但现在对象映射器在 userId
上失败JSON 属性。
JSONProperty
groupId 的注释添加 JSONProperty
普通的 JAXB 生成的 POJO 确实可以工作
public class User {
/* ... */
@XmlElement(name = "group_id", required = true)
@JSONProperty("group_id")
protected String groupId;
/* ... */
}
但是,我的 XML 模式很大,并且手动检测生成的类是不可行的,因为我们经常生成类。
我看到以下两个剩余选项可以解决此问题:
JSONProperty
每个 XMLElement
的注释带有下划线的名称(我首选的下一种方法)我是否错过了显而易见的事情?感谢您的想法。
最佳答案
您是否尝试过注释 groupId
用户类中的属性 @JsonProperty("group_id")
。这应该有效(经过测试和证明)!
如果属性上不存在此类注释,Jackson 映射器将仅按原样考虑属性名称,否则提供的值将用于 JSON 反序列化。这是您的 User
的外观类:
public class User {
private String userId;
@JsonProperty("group_id")
private String groupId;
这应该映射到您的 JSON
{"userId": "foo","group_id": "bar"}
如果您使用基于 Jackson 的 CXF(或任何其他 Rest 框架),我建议阅读以下简短的博客文章,其中详细介绍了如何在 CXF 中配置 JacksonJsonProvider 以实现从/到 Java 的序列化和反序列化/转换为 JSON Snake Case(下划线)格式的数据
关于jaxb - Umarshall JSON 对象,在 Jackson 和 JAXB 之间带有下划线和驼峰式字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21995175/
我正在尝试使用 JAXB 从 XML 生成对象。首先,我根据提供的模式创建对象并将它们打包到 1.jar 中。现在我正在使用这个简单的测试程序(在它拒绝与 Jersey 一起工作之后): import
我正在编写一个解析 JSON 对象的函数。我想发出结构化错误消息,指示哪些特定字段中有错误。 最初我检查错误类型是否为 *json.UnmarshalTypeError,然后从其 Field 属性中检
我正在自学如何在 Golang 中使用 JSON 包。很多事情看起来很简单,但我在解析从 3D 打印机检索到的一些 JSON 数据时遇到了麻烦。 JSON 看起来像这样: { "tasks":
我无法使用 Jersey 通过 @FormParam 传递我自己的对象。它始终为空。我有这样的方法: @POST @Path("search") @Consumes({MediaType.APPLIC
使用 JAXB (2.2) 和 Jackson (1.9.13),我无法将以下 JSON 对象解码到我的 POJO { "userId": "foo", "group_id": "bar"
我是一名优秀的程序员,十分优秀!