【问题标题】:Configure Jackson as JSON Provider in JAX-RS 2.0在 JAX-RS 2.0 中将 Jackson 配置为 JSON 提供程序
【发布时间】:2013-09-11 13:01:10
【问题描述】:

我想使用 Jackson 作为我的 JAX-RS 2.0 网络服务的 JSON 提供程序。对于 JAX-RS,我在 GlassFish 4 中使用 Jersey 2.0。使用 JAX-RS 1.x,我可以添加

<init-param>
  <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
  <param-value>true</param-value>
</init-param>

在我的web.xml。我如何在 Jax-RS 2.0 和 Jersey 2.0 中做到这一点? 我实现了一个这样的应用程序类

public class MyRESTExampleApplication extends ResourceConfig {
    public MyRESTExampleApplication() {
         packages("com.carano.fleet4all.restExample");
         register(JacksonFeature.class);
    }
}

并将这些行添加到我的web.xml。

<init-param>
    <param-name>javax.ws.rs.Application</param-name>
    <param-value>com.example.restExample.MyRESTExampleApplication</param-value>
</init-param>

但是我得到了一个例外的请求 org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: MessageBodyWriter not found for media type=application/json, type=class ...

我的pom.xml 看起来像这样

<dependencies>
  <dependency>
    <groupId>org.glassfish.jersey.core</groupId>
    <artifactId>jersey-server</artifactId>
    <version>2.0</version>
    <scope>provided</scope>
  </dependency>
  <dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-json-jackson</artifactId>
    <version>2.0</version>
    <scope>provided</scope>
  </dependency>
</dependencies>

【问题讨论】:

  • 谢谢!谢谢!我尝试了各种类路径恶作剧来尝试阻止此错误,但明确注册该功能是我可以修复它的唯一方法

标签: rest jersey jackson jax-rs glassfish-4


【解决方案1】:

您应该只需要获取实现 jar Jackson JAX-RS provider,将其添加到您的类路径中,它应该可以工作。 2.x 版使用基于 SPI 的自动注册,因此您不需要 web.xml 中的任何内容。

【讨论】:

  • 这通常对我有用,但 Jackson no 不再使用我的MinIns-Annotations。我现在需要手动注册吗? (我使用 glassfish 4.1 重要吗?)
  • 混合注解总是显式注册的。也许您将混入与常规注释混淆了?使用常规注释确保使用正确的集合:1.x 注释与 2.x 注释不同——名称相同,但它们存在于不同的 Java 包中,类似于解析器实现在不同的 Java 包中的方式(以及具有不同的 Maven 组 ID)。
【解决方案2】:

上面的代码对我有用。 JAX-RS 2.0 具有自动发现功能,因此它应该检测到您的jersey-media-json-jackson.jar。我正在使用 Tomcat 设置,所以我必须像你一样在我的应用程序中显式调用 register(JacksonFeature.class)。

【讨论】:

  • 我收到 java.lang.NoClassDefFoundError: org/codehaus/jackson/jaxrs/JacksonJaxbJsonProvider。你有哪个版本的 jersey-media-json-jackson jar? JacksonFeature 的完整路径是什么?
  • 我没有必要在 Tomcat 7 中显式注册该类。我只是将其添加到 pom.xml:com.fasterxml.jackson.jaxrsjackson-jaxrs-json-provider2.3.0
  • 我遇到了同样的问题。我使用 Jersey 2.0、Jackson 2.0,但我没有使用 Maven。在 Tomcat 7 lib 文件夹中,我有 jersey-media-json-jackson-2.3.jar 和 jackson-jaxrs-json-provider-2.2.3.jar。我尝试使用相同的 NoClassDefFoundError 注册 JacksonFeature:org/codehaus/jackson/jaxrs/JacksonJaxbJsonProvider。如果我不这样做,我会得到:严重:MessageBodyWriter not found for media type=application/json, type=class myClass, genericType=class myClass。我的 web.xml 与原始海报的基本相同。请指教。
猜你喜欢
  • 1970-01-01
  • 2012-06-29
  • 1970-01-01
  • 1970-01-01
  • 2017-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-15
相关资源
最近更新 更多