6

我正在使用 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- Jersey 1.17.1 的工作示例;

迁移到 Jersey 2.0 的分支jersey-2.0-migration- 不工作尝试 -测试失败

使用 Jersey 客户端 2.0 和工作 Jersey 服务器 1.17.1 的分支jersey-2.0-migrate-client-only非工作尝试 -测试失败

问题是:如何在 Jersey 2.0 中启用基于 POJO 的 JSON 绑定

4

2 回答 2

15

文档有点过时了。最新的 Jackson 构建提供了一个自动发现的提供程序。将以下 jar 添加到类路径中:

1)杰克逊注释-2.2.2.jar

2)杰克逊核心2.2.2.jar

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

于 2013-07-09T01:25:50.327 回答
3

我个人喜欢@jontro 的评论/答案......所以我将把它作为答案而不是评论重新发布,这样人们就不会错过它(希望没关系)。

看看https://github.com/FasterXML/jackson-jaxrs-providers那里有新的 jackson jaxrs 提供者(来自 jackson 项目而不是 jersey 项目)。

请注意,这会带来 Jackson2 依赖项(jackson-core-2.2.3.jar 等),而不是 jersey-media-json-jackson 带来的 Jackson1 依赖项(jackson-core-asl-1.9.13.jar 等)。

对于我使用 jersey 2.5 的 maven 项目,这转化为:

移除依赖:

<dependency>
  <groupId>org.glassfish.jersey.media</groupId>
  <artifactId>jersey-media-json-jackson</artifactId>
  <version>2.5.1</version>
</dependency>

添加依赖:

<dependency>
  <groupId>com.fasterxml.jackson.jaxrs</groupId>
  <artifactId>jackson-jaxrs-json-provider</artifactId>
  <version>2.2.3</version>
</dependency>

感谢@user2562639 和@jontro。

于 2014-01-19T22:43:07.597 回答