2

JSR 311 実装として Jersey を使用しています。JSON に変換しようとしているオブジェクトは次のようになります。

@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 などの他の名前があり、これらのフィールドは失われません。

私の pom.xml は次のようになります。

<!-- 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 -->

これ以上の構成はありません。ジャージのウェブサイトやグーグルで役立つ情報が見つからなかったので、初めての投稿でここにたどり着きました.

不足している構成オプションはありますか? IDフィールドをどのようにJSON化しますか?

4

2 に答える 2

2

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

1 - null 値があります

デフォルトでは、JAXB 実装は null 値をマーシャリングしません。null 値をマーシャリングする場合は、必ず次の注釈を追加してください。

@XmlElement(nillable=true)

詳細については、以下を参照してください。

2 - フィールドはあるが、アクセサー (get/set) メソッドがない

デフォルトでは、JAXB は public フィールドとアクセサーのみをマップします。この基準に一致しないものは、マッピングされていないと見なされます。指定することでこの問題を解決できます XmlAccessorType(XmlAccessType.FIELD)

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

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

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

詳細については、以下を参照してください。

3 - get メソッドはあるが set メソッドがない

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

于 2012-04-27T16:19:59.253 に答える
0

「id」について特別なことは何もありません。@XmlRootElementあなたのクラスから、マーシャリングにJAXBを使用していると思います(Jerseyのデフォルト)。デフォルトの構成では、JAXB は、フィールドを XML/JSON にマーシャリングするゲッターと、XML/JSON からフィールドをアンマーシャリングするセッターを必要とします。public Integer getId()この場合、方法が不足していると思います。@XmlElementフィールドに追加することで、この動作を簡単に変更できますid

于 2012-04-27T12:25:20.803 に答える