Java 使用Jersey时未生成JSON
我正在使用Jersey的最新版本来实现一些REST示例服务。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方法:
你知道为什么当我使用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>