java - Jersey 丢失 id 字段

标签 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 字段有其他名称,例如 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/

相关文章:

java - 使用 arrayList 作为 Graphics2d 中的 y 坐标

java - JAXB-REST 无法获取扩展类对象

java - SQL Server与spring的连接

java - 掉落巫师。发送Json,让 Jersey + jackson 认类(Class)

jakarta-ee - Jersey:区分 session 超时和未授权

java - Struts2-tiles-plugin 2.3.28 - StrutsTilesListener 抛出 NullPointerException

java - 如何使用 SpringTemplateLoader 而不是 FiletemPlateLoader 配置 Freemarker

java - 如何在 PCF 中运行的 Spring Boot 应用程序中加载更改的环境变量而不重新启动应用程序?

java - Jersey 中的 multipart/form-data 文件上传+其他参数

java - 从Java中的另一个类获取参数