JSON 未在使用 Jersey 时生成
JSON not generated in using Jersey
我正在使用最新版本的 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 数据时一切正常。
编辑:
我对 Vogella 教程非常熟悉。很多人都发布了它。它使用 Jersey 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>
向球衣 servlet 添加一个初始化参数。否则,使用 Java 配置,在你的 ResourceConfig
中,只是
register(JacksonJaxbJsonProvider.class);
这是为了 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>
我正在使用最新版本的 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 数据时一切正常。
编辑:
我对 Vogella 教程非常熟悉。很多人都发布了它。它使用 Jersey 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>
向球衣 servlet 添加一个初始化参数。否则,使用 Java 配置,在你的 ResourceConfig
中,只是
register(JacksonJaxbJsonProvider.class);
这是为了 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>