我使用 Jersey 作为 JSR 311 实现。我尝试转换为 JSON 的对象如下所示:
@XmlRootElement
public class deliveryTimes{
private Integer id;
private Short type;
private Integer orderId;
/* ... more fields and autogenerated Getters & Setters ... */
}
JSON 结果是:
{"deliveryTimes":
[{"type":"1","orderId":"30449",/* ... other fields ... */ },
/* ... */
]}
换句话说:“id”字段正在丢失。在我的其他对象中,id 字段有其他名称,例如 orderId、customerId...并且这些字段不会丢失。
我的 pom.xml 看起来像这样:
<!-- other stuff -->
<!-- JERSEY -->
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-server</artifactId>
<version>1.11</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-json</artifactId>
<version>1.11</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-grizzly2</artifactId>
<version>1.11</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-servlet</artifactId>
<version>1.11</version>
</dependency>
<!-- Jersey + Spring -->
<dependency>
<groupId>com.sun.jersey.contribs</groupId>
<artifactId>jersey-spring</artifactId>
<version>1.11</version>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- other stuff -->
没有进一步的配置。 我在 Jersey 网站或通过谷歌没有找到任何有用的东西,所以我最终在这里发表了我的第一篇文章。
我缺少任何配置选项吗?如何 JSONify id 字段?
最佳答案
id
无法编码的原因有很多。
1 - 它具有空值
默认情况下,JAXB 实现不会编码(marshal)空值。如果您希望编码(marshal)空值,请务必添加以下注释
@XmlElement(nillable=true)
更多信息请参见:
2 - 有一个字段,但并非没有访问器(获取/设置)方法
默认情况下,JAXB 仅映射公共(public)字段和访问器。任何不符合此条件的内容都被视为未映射。您可以通过指定 XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class deliveryTimes{
...
}
或者通过注释字段
@XmlRootElement
public class deliveryTimes{
@XmlElement
private Integer id;
}
更多信息请参见:
3 - 有get方法但没有set方法
如果有 get 方法但没有附带的 set 方法,那么您的 JAXB 实现会将其视为未映射的属性。要解决此问题,您只需使用 @XmlElement
映射 get 方法即可。
关于java - Jersey 丢失 id 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10350473/