私は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 バインディングを有効にする方法