アプリケーションをJBossAS7にデプロイしてから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
}
あなたの助けをいただければ幸いです!君たちありがとう。
編集:
JAXBプロバイダー間の競合の可能性に直面しているようです。たぶん、私のアプリがJettyを使用してデプロイされたとき、私はJettisonをJAXBプロバイダーとして取得し、JBossJacksonにデプロイされたときです。JBossのドキュメントから:
JacksonクラスにJAXBアノテーションが付けられていて、クラスパスにresteasy-jaxb-providerがある場合は、JettisionJAXBマーシャリングコードをトリガーできます。JAXB jsonマーシャラーをオフにするには、クラスで@ org.jboss.resteasy.annotations.providers.jaxb.IgnoreMediaTypes( "application / * + json")を使用します。
家に帰ったらすぐに、このアプローチを確実に試します。