Java 使用Jersey时未生成JSON

Java 使用Jersey时未生成JSON,java,rest,http,jersey,jersey-2.0,Java,Rest,Http,Jersey,Jersey 2.0,我正在使用Jersey的最新版本来实现一些REST示例服务。 你知道为什么当我使用Fiddler生成以下HTTP请求时,我得到: 500内部服务器错误 MessageBodyWriter not found for media type={application/json, q=1000}, type=class java.util.ArrayList, genericType=java.util.ArrayList<com.example.Todo> 这就是调用的Rest方法:

我正在使用Jersey的最新版本来实现一些REST示例服务。
你知道为什么当我使用Fiddler生成以下HTTP请求时,我得到:
500内部服务器错误

MessageBodyWriter not found for media type={application/json, q=1000}, type=class java.util.ArrayList, genericType=java.util.ArrayList<com.example.Todo>
这就是调用的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数据时,一切正常

编辑:


我对Vogella教程非常熟悉。很多人都贴了这篇文章。它使用泽西2。您正在尝试向项目中添加一些Jersey 1罐。把你自己加的都拿出来。然后找到并添加这些

如果您使用的是web.xml,那么像这样注册提供者

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

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

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

<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>

org.glassfish.jersey.containers
jersey容器servlet核心
你的球衣版本
org.glassfish.jersey.media
泽西媒体公司
你的球衣版本

我认为这应该会有所帮助:您是否有任何stacktrace可以显示给我们。一般来说,500表示抛出异常,在大多数情况下是loggedal,所以您可以列出所有依赖项/jars,只保留您在教程中看到的jar。把其他东西都拿出来。然后查找并添加。它应该可以工作。你确定这是与你显示给我们的错误对应的代码吗?因为错误是关于尝试封送
ArrayList
。这么简单,有一个
Todo
你正在返回。如果我使用jersey 2,那么就不需要所有这些jackson罐子了,对吗?你正在使用jersey 2。您需要的主要内容是提供程序,即
jackson-jaxrs-json提供程序
。但是这个罐子依赖于所有其他罐子。这些是基本的杰克逊罐。提供商无法使用Jersey 1独立生活,将使用您尝试添加的
Jersey json
。但即便如此,这也取决于一些你没有的杰克逊罐子
register(JacksonJaxbJsonProvider.class);
<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>