6

私はJerseyを使用してJSON(Jacksonを介したPOJOマッピングを使用)とJetty(メインメソッドから開始)を生成しています。
これは、Jersey 1.x に最適です。

ServletHolder sh = new ServletHolder(ServletContainer.class);
sh.setInitParameter("com.sun.jersey.config.property.resourceConfigClass",
                        "com.sun.jersey.api.core.PackagesResourceConfig");
sh.setInitParameter("com.sun.jersey.config.property.packages", "service");
sh.setInitParameter("com.sun.jersey.api.json.POJOMappingFeature", "true");
...
context.addServlet(sh, "/rest/*");
Server server = new Server(8080);
server.setHandler(context);
server.start();

今、プロジェクトを Jersey 2.0 に移行しましたが、そこで POJO ベースの JSON バインディングを有効にできませんでした。次のようになります。 org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: MessageBodyWriter not found for media type=application/json, type=class business.entity.ExampleEntity, genericType=class business.entity.ExampleEntity.

明らかに、com.sun.jersey.api.json.POJOMappingFeatureジャージーが行くにつれてもはや有効ではありませんorg.glassfish

ドキュメントには次のように記載されています。

Jackson を JSON (JAXB/POJO) プロバイダーとして使用するには、JacksonFeature と ObjectMapper の ContextResolver (必要な場合) を Configurable (クライアント/サーバー) に登録する必要があります。

しかし、私の場合、それを正しく行う方法がわかりません。

この質問のために小さなプロジェクトを作成しました:

ブランチmaster- Jersey 1.17.1 の作業例。

ブランチjersey-2.0-migration- Jersey 2.0 への移行の試みが機能していません -テストに失敗しました。

ブランチjersey-2.0-migrate-client-only- 動作中のジャージー サーバー 1.17.1 でジャージー クライアント 2.0 を使用しようとして動作していません -テストに失敗しました。

質問: Jersey 2.0 で POJO ベースの JSON バインディングを有効にする方法

4

2 に答える 2

15

ドキュメントは少し古くなっています。最新の Jackson ビルドは、自動検出可能なプロバイダーを提供します。次の jar をクラスパスに追加します。

1) ジャクソン-注釈-2.2.2.jar

2) ジャクソン-コア-2.2.2.jar

3) ジャクソン-databind-2.2.2.jar

4) ジャクソン-jaxrs-base-2.2.1.jar

5) ジャクソン-jaxrs-json-provider-2.2.1.jar

6) jackson-module-jaxb-annotations-2.2.2.jar

「com.fasterxml.jackson.jaxrs.json」を「jersey.config.server.provider.packages」サーブレット構成プロパティに追加して、Jackson json プロバイダーを自動検出できるようにしてください。

于 2013-07-09T01:25:50.327 に答える