java – 无法在Jersey 2.0中为Jackson启用基于POJO的JSON绑定支持

我正在使用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:找不到媒体类型= application / json的MessageBodyWriter,type = class business.entity.ExampleEntity,genericType = class business.entity.ExampleEntity.

显然,com.sun.jersey.api.json.POJOMappingFeature不再有效,因为泽西岛去了org.glassfish

documentation说出以下内容:

In order to use Jackson as your JSON (JAXB/POJO) provider you need to register JacksonFeature and a ContextResolver for ObjectMapper (if needed) in your Configurable (client/server).

但在我的情况下,我无法弄清楚如何正确地做到这一点.

我为这个问题创建了一个小小的project

分支大师 – 泽西岛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绑定

最佳答案
文档有点过时了.最新的Jackson版本提供了一个可自动发现的提供商.将以下jar添加到类路径:

1)jackson-annotations-2.2.2.jar

2)jackson-core-2.2.2.jar

3)jackson-databind-2.2.2.jar

4)jackson-jaxrs-base-2.2.1.jar

5)jackson-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”servlet配置属性中,以便可以自动发现Jackson json提供程序.

转载注明原文:java – 无法在Jersey 2.0中为Jackson启用基于POJO的JSON绑定支持 - 代码日志