我使用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-fields有其他名称,如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 -->
没有进一步的配置。 我在球衣网站上或通过谷歌找不到任何有用的东西,所以我最终在这里发布了我的第一篇文章。
我缺少任何配置选项吗?你如何JSONify id-fields?
答案 0 :(得分:2)
id
可能没有被编组的原因有很多。
1 - 它具有空值
默认情况下,JAXB实现不会编组空值。如果您希望编组一个空值,请务必添加以下注释
@XmlElement(nillable=true)
更多信息请参阅:
2 - 有一个字段,但没有访问者(获取/设置)方法
默认情况下,JAXB仅映射公共字段和访问者。任何不符合此条件的内容都被视为未映射。您可以通过指定XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class deliveryTimes{
...
}
或通过注释字段
@XmlRootElement
public class deliveryTimes{
@XmlElement
private Integer id;
}
更多信息请参阅:
3 - 有一个get方法但没有set方法
如果有get方法但没有附带的set方法,那么您的JAXB实现会将其视为未映射的属性。要解决此问题,您只需将get方法映射为@XmlElement
。
答案 1 :(得分:0)
“id”没有什么特别之处。从你班上的@XmlRootElement
开始,我假设您正在使用JAXB进行编组(默认使用Jersey)。在默认配置中,JAXB需要getter将字段封送为XML / JSON,并使用setter从XML / JSON解组字段。在这种情况下,我猜您缺少public Integer getId()
方法。您可以通过将@XmlElement
添加到id
字段来轻松更改此行为。