4

短いバージョン:

私は Jersey 1.17 と Jackson 2.1.4 を使用していますが、Jersey は私が使用するすべての Jackson アノテーションを無視しています。どうして!?誰も同じ問題に遭遇しましたか?

ロングバージョン:

Jersey 1.17 と Jackson 1.9.2 を使用していた RESTful Web サービスがあり、@JsonManagedReference@JsonBackReferenceアノテーションを使用して双方向の関係の問題を解決していましたが、すべて正常に機能していました。

先日、 @JsonIdentityInfoアノテーションを含む Jackson の 2.1.4 バージョンを見ました。これは私の問題に対する優れた解決策のように思えたので、jar ファイルを Jackson 2.1.4 に変更しました。しかし、有望な@JsonIdentityInfoアノテーションは機能せず、Jersey はそれを完全に無視していました。少しデバッグしてコードを変更した後、以前の@JsonManagedReferenceおよび@JsonBackReferenceアノテーションでさえ、Jersey によって無視されていることがわかりました。したがって、Jersey は Jackson 2.1.4 アノテーションを完全に無視しているようです。どうして!?誰も同じ問題に遭遇しましたか?

4

2 に答える 2

3

http://wiki.fasterxml.com/JacksonAnnotationsに記載されているとおり:

重要な注意: Jackson 1.x および 2.x のアノテーションは、異なる Java および Maven パッケージに存在します。完全な説明については、Jackson 2.0 を参照してください。

  • 1.x の注釈はorg.codehaus.jackson.annotate、Jackson コア jarの Java パッケージにあります。
  • 2.x 注釈は Java パッケージcom.fasterxml.jackson.annotationの「jackson-databind」jar にあります。

したがって、「インポート関連」の問題である可能性があります。別の理由 (@ HiJon89 で既に述べたように) は、正しい JacksonJsonProvider バージョンを使用することです。バージョン 2.x の場合、「jackson-jaxrs-json-provider」と「jersey-core」を組み合わせて挿入すると、自動的に登録されます。

私の現在作業中のjackson 2.1.4への更新(1.9.2 jerseyに必要な依存関係から)は次のとおりです。

  • jersey-json の依存関係を削除する
  • jersey-core と jackson-jaxrs-json-provider を追加

    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-core</artifactId>
        <version>${jersey.version}</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.jaxrs</groupId>
        <artifactId>jackson-jaxrs-json-provider</artifactId>
        <version>${jackson-jaxrs-json-provider.version}</version>
    </dependency>
    

後者の jar には、"META-INF/services/javax.ws.rs.ext.MessageBodyWriter" ファイルがあり、どのクラスがプロバイダーとして機能するかを jersey に伝えます。

したがって、クラスパスに古い jar がもうないことを再確認する以外にアドバイスはありません。

于 2013-04-05T15:29:34.043 に答える