0

エンティティを JSON にマーチャリングするために RestEasy を使用しています。それは問題なく機能しますが、どういうわけかすべてが文字列として表されます。例えば

@XmlRootElement(name="TestObject")
public class TestObject {
    private Long value;
    public Long getValue(){
        return value;
    }
}

次のようなものを作成する代わりに:{TestObject:{value:1234}}

作成します{TestObject:{value:"1234"}}(数字の前後の「 」に注意してください)

そのため、long 値は文字列に変換されます。どうすればそれを回避できますか?

Jackson フォーラムで、RestEasy が JSON マーチャリングに使用しているものを尋ねましたが、おそらく Java->XML->JSON に移行したことが原因であるとのことでした。RestEasy フォーラムはないようで、Seam フォーラムでは誰も私の質問に答えることができませんでした。

他の誰かが同じ問題を抱えていますか?

よろしく

4

2 に答える 2

1

問題は、RestEasy+Seam がデフォルトで Jettison を使用することです (Jackson ではありません)。Jettison は、Java->XML->JSON を介してマーチャリングを行います。

Jackson jar は実際には Seam ディストリビューションに含まれていないため、RestEasy をダウンロードして、jackson に言及しているすべての jar を lib ディレクトリにコピーする必要があります。RestEasy がクラスパスで resteasy-jackson-provider.jar を見つけると、Jettison の代わりに Jackson が使用されます。

Jettison から Jackson に移動する際に発生した問題の 1 つは、参照の循環でした。Jettison では、メソッド (@ManyToOne 関係など) に @XmlTransient. ジャクソンの場合、注釈を付ける必要があります@JsonIgnore

于 2010-10-01T15:44:27.650 に答える
1

使用する

<dependency>
    <groupId>org.jboss.resteasy</groupId>
    <artifactId>resteasy-jettison-provider</artifactId>
    <version>2.0.1.GA</version>
    <exclusions>
        <exclusion>
            <groupId>javax.xml.bind</groupId>
            <artifactId>jaxb-api</artifactId>
        </exclusion>
        <exclusion>
            <groupId>com.sun.xml.bind</groupId>
            <artifactId>jaxb-impl</artifactId>
        </exclusion>
        <exclusion>
            <groupId>javax.xml.stream</groupId>
            <artifactId>stax-api</artifactId>
        </exclusion>
    </exclusions>
</dependency>

resteasy-jettison-provider のみを使用していますが、JSON 出力を取得しようとするとサーバーがハングしますが、jaxb-api と jaxb-impl を除外した後です。webservice は JSON 出力で完全に正常に動作します

于 2011-06-23T10:56:12.103 に答える