首页 文章

与JBoss AS 7和Jetty一起部署时,使用RestEasy序列化POJO

提问于
浏览
0

在JBoss AS 7和Jetty上部署我的应用程序时,我注意到RestEasy序列化我的POJO时存在不良差异 . 使用Jetty,我有以下JSON:

{
"pojo-name":{
    "lines":[
        {
            "code":"250-1",
            "id":1143,
         }]
    }
}

但是,当部署在JBoss AS 7上时,@ XmlRootElement注释给出的“pojo-name”会消失,结果是:

{
"lines":[
    {
        "code":"250-1",
        "id":1143,
    }]
}

我有一个包含以下依赖项的POM文件:

<dependency>
      <groupId>org.jboss.resteasy</groupId>
      <artifactId>resteasy-jaxrs</artifactId>
      <version>${resteasy.version}</version>
      <scope>provided</scope>
  </dependency>
  <dependency>
      <groupId>org.jboss.resteasy</groupId>
      <artifactId>resteasy-jaxb-provider</artifactId>
      <version>${resteasy.version}</version>
      <scope>provided</scope>
  </dependency>
  <dependency>
      <groupId>org.jboss.resteasy</groupId>
      <artifactId>jaxrs-api</artifactId>
      <version>${resteasy.version}</version>
      <scope>provided</scope>
  </dependency>
  <dependency>
      <groupId>org.jboss.resteasy</groupId>
      <artifactId>resteasy-spring</artifactId>
      <version>${resteasy.version}</version>
      <exclusions>
          <exclusion>
              <artifactId>commons-logging</artifactId>
              <groupId>commons-logging</groupId>
          </exclusion>
          <exclusion>
              <artifactId>jaxb-impl</artifactId>
              <groupId>com.sun.xml.bind</groupId>
          </exclusion>
          <exclusion>
              <artifactId>sjsxp</artifactId>
              <groupId>com.sun.xml.stream</groupId>
           </exclusion>
           <exclusion>
              <artifactId>jsr250-api</artifactId>
              <groupId>javax.annotation</groupId>
           </exclusion>
           <exclusion>
              <artifactId>activation</artifactId>
              <groupId>javax.activation</groupId>
           </exclusion>
      </exclusions>
 </dependency>

我的POJO类看起来像这样:

@XmlRootElement(name = "pojo-name")
public class LinesResponse implements Serializable {

    private static final long serialVersionUID = -8717658630497030320L;

    private List<Lines> lines;

    public LinesResponse() {}

    // Getters and setters
}

非常感谢您的帮助!感谢你们 .


编辑:

看来我将Jettison作为JAXB提供商并在JBoss Jackson上部署时 . 从JBoss documentation我们有:

如果您的Jackson类使用JAXB注释进行注释,并且在类路径中有resteasy-jaxb-provider,则可以触发Jettision JAXB编组代码 . 要关闭JAXB json marshaller,请在类上使用@ org.jboss.resteasy.annotations.providers.jaxb.IgnoreMediaTypes(“application / * json”) .

我一回到家,就会尝试这种方法 .

1 回答

  • 0

    刚刚确认了上述假设 . 这是JAXB提供商之间的混淆 . 当部署在JBoss上时,我的应用程序使用Jackson,而Jetty则使用Jettison . 为了解决这个问题,我强行使用 Jackson 提供商

    <dependency>
            <groupId>org.jboss.resteasy</groupId>
            <artifactId>resteasy-jackson-provider</artifactId>
            <version>${resteasy.version}</version>
            <scope>provided</scope>
       </dependency>
    

相关问题