在JAX-RS 2.0中配置Jackson作为JSON提供程序

16

我想将Jackson作为我的JAX-RS 2.0 Web服务的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>
在Jax-RS 2.0和Jersey 2.0中,我该如何在我的web.xml中实现此功能?我像这样实现一个应用程序类。
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>

谢谢!谢谢!我尝试了各种类路径的把戏来阻止这个错误,但是显式地注册该功能是唯一修复它的方法。 - natke
2个回答

22

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


这对我通常是有效的,但是Jackson不再使用我的MinIns-Annotations了。现在我需要手动注册它们吗?(我使用的是glassfish 4.1,这有关系吗?) - thomas.mc.work
混合注释总是明确注册的。也许您将混合注释与常规注释混淆了?对于常规注释,请确保使用正确的集:1.x注释与2.x注释不同--名称相同,但它们位于不同的Java包中,类似于解析器实现位于不同的Java包中(并具有不同的Maven组ID)。 - StaxMan

13

上面的代码对我有用。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的完整路径是什么? - Dejell
我不需要在Tomcat 7中显式注册类。我只需将以下内容添加到pom.xml文件中: com.fasterxml.jackson.jaxrs jackson-jaxrs-json-provider 2.3.0 - Desty
我遇到了同样的问题。我使用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。我尝试注册JacksonFeature,但出现了相同的NoClassDefFoundError错误:org/codehaus/jackson/jaxrs/JacksonJaxbJsonProvider。如果我不这样做,我会得到:SEVERE: MessageBodyWriter not found for media type=application/json, type=class myClass, genericType=class myClass.我的web.xml基本上与原帖的一样。请给予建议。 - Yuri P.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接