2012-04-27 9 views
2

JSR 311実装としてJerseyを使用しています。私はJSONに変換しようとしているオブジェクトは、次のようになります。JerseyがIDフィールドを失う

@XmlRootElement 
public class deliveryTimes{ 
    private Integer id; 
    private Short type; 
    private Integer orderId; 
    /* ... more fields and autogenerated Getters & Setters ... */ 
} 

JSONの結果は次のとおりです。

{"deliveryTimes": 
[{"type":"1","orderId":"30449",/* ... other fields ... */ }, 
/* ... */ 
]} 

単語:フィールド「id」が失われています。私の他のオブジェクトでは、idフィールドにはorderId、customerIdなどの名前があり、これらのフィールドは失われません。

<!-- other stuff --> 
<!-- JERSEY --> 
<dependency> 
    <groupId>com.sun.jersey</groupId> 
    <artifactId>jersey-server</artifactId> 
    <version>1.11</version> 
</dependency> 
<dependency> 
    <groupId>com.sun.jersey</groupId> 
    <artifactId>jersey-json</artifactId> 
    <version>1.11</version> 
</dependency> 
<dependency> 
    <groupId>com.sun.jersey</groupId> 
    <artifactId>jersey-grizzly2</artifactId> 
    <version>1.11</version> 
</dependency> 
<dependency> 
    <groupId>com.sun.jersey</groupId> 
    <artifactId>jersey-servlet</artifactId> 
    <version>1.11</version> 
</dependency> 

<!-- Jersey + Spring --> 
<dependency> 
    <groupId>com.sun.jersey.contribs</groupId> 
    <artifactId>jersey-spring</artifactId> 
    <version>1.11</version> 
    <exclusions> 
     <exclusion> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring</artifactId> 
     </exclusion> 
     <exclusion> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-core</artifactId> 
     </exclusion> 
     <exclusion> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-web</artifactId> 
     </exclusion> 
     <exclusion> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-beans</artifactId> 
     </exclusion> 
     <exclusion> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-context</artifactId> 
     </exclusion> 
    </exclusions> 
</dependency> 
<!-- other stuff --> 

それ以上の設定はありません:

私のpom.xmlは、このようになります。 私はジャージーのウェブサイトやGoogleを介して役立つものは何も見つかりませんでした。

設定オプションがありますか?どのようにIDフィールドをJSONifyしますか?

答えて

2

idがマーシャリングされない理由はいくつかあります。

1 - それはNULL値をマーシャリングしませんデフォルトのJAXBの実装によってはnull値

を持っています。 - そこフィールドがなく、

2:あなたはNULL値をマーシャリングしたい場合は参照してください詳細については、次の注釈

@XmlElement(nillable=true) 

を追加してくださいアクセサー(get/set)メソッドなし

デフォルトでは、JAXBはパブリックフィールドとaccesso rs。この基準に合致しないものはマップされていないものとみなされます。 - あり

3:あなたは参照してください詳細情報XmlAccessorType(XmlAccessType.FIELD)

@XmlRootElement 
@XmlAccessorType(XmlAccessType.FIELD) 
public class deliveryTimes{ 
    ... 
} 

またはフィールドに注釈を付けることで

@XmlRootElement 
public class deliveryTimes{ 
    @XmlElement 
    private Integer id; 
} 

を指定することで、この問題を解決することができますgetメソッドbu t no setメソッド

getメソッドはありますが、それに付随するsetメソッドがない場合、JAXB実装ではマップされていないプロパティとして扱われます。これを修正するには、単にgetメソッドを@XmlElementにマップする必要があります。

+0

あなたのお返事ありがとうございます。実際には、null値を渡す方法を探していました(あなたは#1で正しく推測しました)。 "id"のデータ型をintからIntegerに変更しましたが、セッターを忘れました。次回は、IDEがそれをリファクタリングするようにします。あなたの詳細な有益な答えをもう一度ありがとうございます(私は十分な評判があれば、それを+1しました)! –

0

「id」には何も特別なものはありません。あなたのクラスの@XmlRootElementから、私はマーシャル(Jerseyのデフォルト)のためにJAXBを使用していると仮定します。デフォルト設定では、JAXBはフィールドをXML/JSONにマーシャリングするためのゲッタと、XML/JSONからフィールドを非整列化するセッタを必要とします。この場合、私はpublic Integer getId()メソッドが欠けていると思います。 idフィールドに@XmlElementを追加することで、この動作を簡単に変更できます。

+1

または、@ XmlAccessorType(XmlAccessType.FIELD)を使用できるプロパティがない場合は –

関連する問題