Jersey 2.x中的JSON输出失败

时间:2014-08-07 15:05:48

标签: java json jersey

我最近升级到Jersey 2.x,当我打电话给这个网络服务时:

@GET
@Path("/mocks")
@Produces(MediaType.APPLICATION_JSON)
public String getIt() {
    List<Date> list = new ArrayList<>();
    list.add(new Date());
    list.add(new Date());
    list.add(new Date());
    return Response.status(200).entity(list).build();
}

我收到以下错误消息:

org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: MessageBodyWriter not found for media type=application/json, type=class java.util.ArrayList, genericType=class java.util.ArrayList.

完整输出如下:

javax.servlet.ServletException: org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: 
MessageBodyWriter not found for media type=application/json, type=class java.util.ArrayList, genericType=class java.util.ArrayList.
    org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:391)
    org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:382)
    org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:345)
    org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:220)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)

我注释掉了依赖

    <dependency>
        <groupId>org.glassfish.jersey.media</groupId>
        <artifactId>jersey-media-moxy</artifactId>
    </dependency>

并再次发生同样的事情。然后我尝试添加以下依赖项,但没有改变:

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

关于如何解决的任何想法?

3 个答案:

答案 0 :(得分:3)

如果您想将Jackson用作JSON提供程序,请尝试添加以下依赖项。

<dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-json-jackson</artifactId>
    <version>[required-version]</version>
</dependency>

然后在JacksonFeature注册Configurable

public class MyConfig extends ResourceConfig {

    public MyConfig() {

        register(JacksonFeature.class);

        ...
    }
}

MOXy媒体模块是您无需在客户端/服务器MoxyJsonFeature中明确注册其功能(Configurable)的模块之一,因为此功能会在您添加时自动发现并注册jersey-media-moxy模块到您的类路径。

手动注册任何其他Jersey JSON提供程序功能会禁用MoxyJsonFeature的自动启用和配置。

答案 1 :(得分:3)

从Jersey 2.9开始,禁用自动发现,为了像以前的版本一样启用它,您需要为jersey-metainf-services添加依赖项。

<dependency>
  <groupId>org.glassfish.jersey.ext</groupId>
  <artifactId>jersey-metainf-services</artifactId>
  <version>your_version</version>
</dependency>

答案 2 :(得分:1)

您需要通过下载以下任何jar和amp;来启用您的JSON支持。将其放在WEB-INF / lib。

JSON-P(8.1.3),Jackson(8.1.4)或Jettison(8.1.5)或者如果其他人工作不正常你也可以试试这个--Genson https://code.google.com/p/genson/

希望它有所帮助!!