【问题标题】:JSON output in Jersey 2.x failsJersey 2.x 中的 JSON 输出失败
【发布时间】:2014-08-07 15:05:47
【问题描述】:

我最近升级到 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>

关于如何解决这个问题的任何想法?

【问题讨论】:

  • 你能显示你的 web.xml 吗?

标签: java json jersey


【解决方案1】:

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

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

然后在您的Configurable 中注册JacksonFeature

public class MyConfig extends ResourceConfig {

    public MyConfig() {

        register(JacksonFeature.class);

        ...
    }
}

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

      希望对你有帮助!!

      【讨论】:

        猜你喜欢
        • 2013-09-14
        • 2015-03-03
        • 1970-01-01
        • 2015-12-01
        • 2016-01-04
        • 1970-01-01
        • 2015-12-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多