1

OSGi/Spring Web アプリケーションを Jersey 2 に更新しています。現在、Jersey 2 で問題なくコンパイルおよびインストールされていますが、リソースにアクセスすると次のエラーが発生します。

メディア タイプ = application/json、タイプ = クラス org.codehaus.jettison.json.JSONObject、genericType = クラス org.codehaus.jettison.json.JSONObject の MessageBodyWriter が見つかりません。

ジャージの「メディア プロバイダー」としての org.codehaus.jettison.json の現在の構成の詳細。

• jersey-media-json-jettison への依存関係を追加

• ここで web.xml に org.codehaus パッケージを指定し、glassfish 固有の init-param を使用します。

<init-param>
      <param-name>jersey.config.server.provider.packages</param-name>
      <param-value>
                    org.codehaus.jettison.json,
                    ...
      </param-value>
</init-param>

• webapp bundles bnd ファイルにパッケージを追加しました:

org.codehaus.jettison.json,\

これは、OSGi コンソールで正常にインポートされていることを示しています。

Imported packages  

org.codehaus.jettison.json; version="1.3.3"

コンソールには、jersey-media-json-jettison バンドルで使用されているパッケージも表示されます。

packages org.codehaus.jettison.json  
 org.codehaus.jettison.json; version="1.3.3"<org.codehaus.jettison.jettison_1.3.3 [121]>  
    org.glassfish.jersey.media.jersey-media-json-jettison_2.22.1 [192]    

json プロバイダーを構成するためにここに欠けているアイデアはありますか?

パッケージを使用org.codehaus.jettisonするには、json プロバイダーとして機能するようにプログラムによる構成が必要ですか?

私は正しい質問をしていますか?

ありがとう、トム

4

1 に答える 1

0

Jettison には s の aと がMessageBodyWriterあります。何らかの理由で、jettison バージョンが 2.9 を超えていても、自動検出されません (少なくとも私にとってはそうでした)。で注釈が付けられていないためかもしれません。この問題を解決したのは、それぞれのクラスを ResourceConfig に手動で追加することでした。MessageBodyReaderorg.codehaus.jettison.json.JSONObject@Provider

register(JettisonObjectProvider.App.class);

この後、次のような応答を作成します

Response.ok(new JSONObject(), MediaType.APPLICATION_JSON).build();

ジャージ1と同じように機能しました。

于 2018-01-12T16:02:29.927 に答える