无法在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: 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)提供程序,您需要在Configurable(客户端/服务器)中为ObjectMapper(如果需要)注册JacksonFeature和ContextResolver。
但在我的情况下,我无法弄清楚如何正确地做到这一点。
我为这个问题创建了一个小项目 :
分支master
– 泽西岛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提供程序。
我个人很喜欢@ jontro的评论/答案……所以我会重新发布它作为答案而不是评论,这样人们就不会错过它(希望没问题)。
看看https://github.com/FasterXML/jackson-jaxrs-providers ,其中有新的jackson jaxrs提供者(来自jackson项目而不是泽西项目)。
请注意,这带来了Jackson2依赖项(jackson-core-2.2.3.jar等),而不是jersey-media-json-jackson引入的Jackson1依赖项(jackson-core-asl-1.9.13.jar等)。
对于我使用jersey 2.5的maven项目,这意味着:
删除依赖项:
org.glassfish.jersey.media jersey-media-json-jackson 2.5.1
添加依赖项:
com.fasterxml.jackson.jaxrs jackson-jaxrs-json-provider 2.2.3
感谢@ user2562639和@jontro。