泽西队输掉了比赛场地

时间:2012-04-27 12:17:40

标签: java spring jersey jsr311

我使用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?

2 个答案:

答案 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字段来轻松更改此行为。