【发布时间】:2013-07-04 21:04:35
【问题描述】:
我正在使用 Jersey 来生成 JSON(通过 Jackson 进行 POJO 映射)和 Jetty(从 main 方法开始)。
它非常适合 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
documentation 说如下:
为了将 Jackson 用作您的 JSON (JAXB/POJO) 提供程序,您需要在 Configurable(客户端/服务器)中为 ObjectMapper(如果需要)注册 JacksonFeature 和 ContextResolver。
但我不知道如何正确地做到这一点。
我为这个问题创建了一个小project:
branch master - Jersey 1.17.1 的工作示例;
branch jersey-2.0-migration - 无法尝试迁移到 Jersey 2.0 - 测试失败;
branch jersey-2.0-migrate-client-only - 无法将 Jersey 客户端 2.0 与工作 Jersey 服务器 1.17.1 一起使用 - 测试失败。
问题是:如何在 Jersey 2.0 中启用基于 POJO 的 JSON 绑定
【问题讨论】: