如果maven dependecy设置为提供,则Jbos​​s 7.1.1中的Jackson @JsonSerialize被忽略

gra*_*hez 9 jboss json jax-rs jackson java-ee-6

我在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
}
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

scopefor resteasy-jackson-provider设置为providedit时,忽略注释并返回nullJSON响应.但是,当我删除scopemaven依赖 - 它的工作原理.

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

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

小智 14

您需要确保创建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>
Run Code Online (Sandbox Code Playgroud)

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