在访问我的jax-rs资源时,我收到了以下堆栈跟踪.
我正在使用Tomcat 7,Jersey 1.12和Hibernate 4以及MySQL.
我在搜索解决方案时找到了本教程:http://aruld.info/handling-generified-collections-in-jersey-jax-rs/但是列出的所有示例似乎都不起作用.
我在这里错过了什么?
请不要让我写的答案MessageBodyWriters,这应该可以解决问题.(而且我知道有一个解决方案,我无法弄明白.)
这是我的所有罐子:
antlr-2.7.7.jar
asm-3.1.jar
commons-collections-3.2.1.jar
dom4j-1.6.1.jar
gson-1.7.1.jar
hibernate-commons-annotations-4.0.1.Final.jar
hibernate-core-4.1.0.Final.jar
hibernate-jpa-2.0-api-1.0.1.Final.jar
jackson-core-asl-1.9.2.jar
jackson-jaxrs-1.9.2.jar
jackson-mapper-asl-1.9.2.jar
jackson-xc-1.9.2.jar
javassist-3.15.0-GA.jar
jboss-logging-3.1.0.CR2.jar
jboss-transaction-api_1.1_spec-1.0.0.Final.jar
jersey-client-1.12.jar
jersey-core-1.12.jar
jersey-json-1.12.jar
jersey-server-1.12.jar
jersey-servlet-1.12.jar
jettison-1.1.jar
jsr311-api-1.1.1.jar
mysql-connector-java-3.1.12-bin.jar
Run Code Online (Sandbox Code Playgroud)
这是我的资源类和方法:
@Path("/region")
public class RegionService {
// This method is called if TEXT_PLAIN is request
@GET
@Produces(MediaType.APPLICATION_JSON)
public JResponse<List<Region>> region() {
RegionDao regionDao = new RegionDao();
regionDao.openSession();
List<Region> regions = regionDao.getAll();
regionDao.closeSession();
return JResponse.ok(regions).build();
}
}
Run Code Online (Sandbox Code Playgroud)
这是堆栈跟踪:
SEVERE: Mapped exception to response: …Run Code Online (Sandbox Code Playgroud) @XmlRootElement
public class Todo {
private String s = "test";
public String getS() {
return s;
}
public void setS(String s) {
this.s = s;
}
}
Run Code Online (Sandbox Code Playgroud)
和服务:
@Path("/test")
public class Service {
@GET
@Produces({MediaType.APPLICATION_JSON })
public List<Todo> getAllGadgets() {
return Arrays.asList(new Todo[] { new Todo() });
}
}
Run Code Online (Sandbox Code Playgroud)
我的web.xml:
<servlet>
<servlet-name>Jersey REST Service</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>com.test</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey REST Service</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)
如果我将MediaType.APPLICATION_XML设置为生成注释,则所有这些都有效.但对于JSON,我得到以下异常:
严重:映射异常响应:500(内部服务器错误)javax.ws.rs.WebApplicationException:com.sun.jersey.api.MessageException:Java类java.util.Arrays $ ArrayList和Java类型java的消息体编写器找不到.util.List和MIME媒体类型application/json
我使用Jersey 1.6,根据教程,JSON格式应该可以在没有任何额外编程的情况下使用JAXB.怎么了?