【问题标题】:JSON not generated in using Jersey使用 Jersey 时未生成 JSON
【发布时间】:2015-06-01 16:28:20
【问题描述】:

我正在使用最新版本的 Jersey 来实现一些 REST 示例服务。
您是否知道为什么当我使用 Fiddler 生成以下 HTTP 请求时,我得到:
500 Internal Server Error

MessageBodyWriter not found for media type={application/json, q=1000}, type=class java.util.ArrayList, genericType=java.util.ArrayList<com.example.Todo>

HTTP 请求:

GET http://localhost:8080/RestProject/rest/todos/1 HTTP/1.1
Connection: close
Accept: application/json
User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/41.0.2272.101 Safari/537.36
Accept-Encoding: gzip, deflate, sdch
Accept-Language: it-IT,it;q=0.8,en-US;q=0.6,en;q=0.4
Host: localhost:8080

这就是调用的 Rest 方法:

 //This method is called if XML or JSON is requested  
  @GET  
  @Path("{id}")  
  @Produces({MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON,MediaType.TEXT_XML})  
  public Todo getEntityXMLOrJSON(@PathParam("id") int id)  
  {
    Todo todo = new Todo();
    todo.setSummary("This is my first todo " + id);
    todo.setDescription("This is my first todo");
    return todo;
  }

当我请求 xml 数据时,一切正常。

编辑:

【问题讨论】:

  • 你有任何堆栈跟踪可以告诉我们。通常 500 表示抛出异常,在大多数情况下会记录
  • 你也可以列出你所有的依赖项/jars
  • 只保留您在教程中看到的罐子。把其他东西都拿出来。然后找到并添加these。它应该可以工作。
  • 您确定这是与您向我们展示的错误相对应的代码吗?因为错误是关于尝试编组ArrayList&lt;Todo&gt;。很简单,有一个Todo 你回来了。

标签: java rest http jersey jersey-2.0


【解决方案1】:

我对 Vogella 教程非常熟悉。很多人都发布了关于它的信息。它使用 Jersey 2。您正在尝试将一些 Jersey 1 jar 添加到项目中。把你自己添加的所有东西都拿出来。然后找到并添加这些

如果您使用的是 web.xml,则像这样注册提供程序

<param-name>jersey.config.server.provider.packages</param-name>
<param-value>
    com.jersey.jaxb,com.fasterxml.jackson.jaxrs.json
</param-value>

向 jersey servlet 添加一个 init 参数。否则,使用 Java 配置,在您的 ResourceConfig 中,只需

register(JacksonJaxbJsonProvider.class);

这是为了 JAXB 注释支持。如果你不需要它,那么你可以使用JacksonJsonProvider

【讨论】:

  • 如果我使用球衣 2,那么所有这些杰克逊罐子都不需要,对吧?
  • 正在使用 Jersey 2。您需要的主要是提供者,即jackson-jaxrs-json-provider。但是那个罐子依赖于所有其他罐子。这些是基本的杰克逊罐子。提供者不能独立生存
  • 对于 Jersey 1,将使用您尝试添加的 jersey-json。但即便如此,这也取决于您没有的一些 Jackson 罐子
【解决方案2】:

我的解决方案是添加以下依赖项;

<dependency>
    <groupId>org.glassfish.jersey.containers</groupId>
    <artifactId>jersey-container-servlet-core</artifactId>
    <version>your jersey version</version>
</dependency>
<dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-json-jackson</artifactId>
    <version>your jersey version</version>
</dependency>

【讨论】:

    猜你喜欢
    • 2016-06-21
    • 2011-08-26
    • 2013-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-14
    相关资源
    最近更新 更多