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