9

我在 JBoss 7.1.1 的 WAR 存档中部署了 Jax-rs 端点。在它的 JSON 响应中,我不希望null包含我的字段名称,所以我放@JsonSerialize了它。

class MyResponse {

    private Long id;

    @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
    private String name;

    private List<String> addresses;

    // getters and setters
}

pom.xml的有以下

    <dependency>
        <groupId>org.jboss.resteasy</groupId>
        <artifactId>resteasy-jaxrs</artifactId>
        <version>2.3.2.Final</version>
        <scope>provided</scope>
    </dependency>

    <dependency>
        <groupId>org.jboss.resteasy</groupId>
        <artifactId>resteasy-jackson-provider</artifactId>
        <version>2.3.2.Final</version>
        <scope>provided</scope>
    </dependency>

scopeforresteasy-jackson-provider设置为时,provided它会忽略注释并null在 JSON 响应中返回。但是,当我scope从 Maven 依赖项中删除时-它可以工作。

从这里的页面https://docs.jboss.org/author/display/AS71/Implicit+module+dependencies+for+deployments如果发现 Jax-RS 部署,JBoss 应该自动加载此模块。

现在我不知道这是否是一个错误,我是否真的应该包含这个依赖项(不保留它provided)。或者也许我在那里做错了什么?

4

1 回答 1

15

您需要确保创建一个 JBoss 部署结构描述符。

由于这是一个 Maven 项目,我假设它位于 src/main/webapp/WEB-INF/jboss-deployment-structure.xml 下

<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.0">
  <deployment>
    <dependencies>
      <module name="org.codehaus.jackson.jackson-core-asl" />
      <module name="org.codehaus.jackson.jackson-mapper-asl" />
    </dependencies>
  </deployment>
</jboss-deployment-structure>

这将允许对 RESTEasy 和 Jackson 的内置支持在 JBoss 7.1.x 或 JBoss EAP 6.x 中正常工作。如果没有这个描述符,RESTEasy 将使用 Jettison 提供程序。

于 2013-02-26T09:18:13.433 回答