我正在测试RESTful服务,当我执行时,我得到异常,尽管我的类路径(WEB-INF / lib)中有以下jar,但是我没有使用Maven,我的JDK版本是1.5.关于这个问题的其他问题没有帮助解决问题.
代码片段
@GET @Produces("application/json") //@Produces({MediaType.APPLICATION_JSON}) tried this,didn't work either public List<Emp> getEmployees() { List<Emp> empList = myDAO.getAllEmployees(); log.info("size " + empList.size()); return empList; } @XmlRootElement public class Emp { ......
web.xml中
<servlet> <servlet-name>Jersey Web Application</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>test.employees</param-value> </init-param> <init-param> <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name> <param-value>true</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>Jersey Web Application</servlet-name> <url-pattern>/rest/*</url-pattern> </servlet-mapping>
罐子列表
jersey-server-1.2.jar jersey-core-1.2.jar jsr311-api-1.1.jar asm-3.1.jar jaxb-api-2.0.jar jaxb-impl-2.0.jar jackson-xc-1.2.0.jar jackson-jaxrs-1.2.0.jar jackson-mapper-asl-1.2.0.jar jackson-core-asl-1.2.0.jar jettison-1.2.jar jersey-client-1.2.jar jersey-servlet-1.10.jar jersey-json-1.8.jar
异常堆栈
SEVERE: A message body writer for Java class java.util.ArrayList,and Java type java.util.List<test.Emp>,and MIME media type application/json was not found Nov 21,2013 11:47:26 AM com.sun.jersey.spi.container.ContainerResponse traceException SEVERE: Mapped exception to response: 500 (Internal Server Error) javax.ws.rs.WebApplicationException at javax.ws.rs.WebApplicationException.<init>(WebApplicationException.java:97) at javax.ws.rs.WebApplicationException.<init>(WebApplicationException.java:55) at com.sun.jersey.spi.container.ContainerResponse.write(ContainerResponse.java:267) at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1035) at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:947) at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:939) at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:399) at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:478) at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:663) at javax.servlet.http.HttpServlet.service(HttpServlet.java:856) at com.evermind.server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java:719) at com.evermind.server.http.ServletRequestDispatcher.forwardInternal(ServletRequestDispatcher.java:376) at com.evermind.server.http.HttpRequestHandler.doProcessRequest(HttpRequestHandler.java:870) at com.evermind.server.http.HttpRequestHandler.processRequest(HttpRequestHandler.java:451) at com.evermind.server.http.HttpRequestHandler.serveOneRequest(HttpRequestHandler.java:218) at com.evermind.server.http.HttpRequestHandler.run(HttpRequestHandler.java:119) at com.evermind.server.http.HttpRequestHandler.run(HttpRequestHandler.java:112) at oracle.oc4j.network.ServerSocketReadHandler$SafeRunnable.run(ServerSocketReadHandler.java:260) at oracle.oc4j.network.ServerSocketAcceptHandler.procClientSocket(ServerSocketAcceptHandler.java:230) at oracle.oc4j.network.ServerSocketAcceptHandler.access$800(ServerSocketAcceptHandler.java:33) at oracle.oc4j.network.ServerSocketAcceptHandler$AcceptHandlerHorse.run(ServerSocketAcceptHandler.java:831) at com.evermind.util.ReleasableResourcePooledExecutor$MyWorker.run(ReleasableResourcePooledExecutor.java:303) at java.lang.Thread.run(Thread.java:595)
如何解决这个问题?
解决方法
确保您的项目中没有多个泽西版本.从您提供的列表中,有3个不同版本的模块(1.2,1.10,1.8).对于某些模块,Jersey会检查模块的版本是否与核心版本相同.如果不是,那么模块的提供者(如MessageBodyReaders,MessageBodyWriters)在运行时没有被注册.这可能是您的设置中的问题 – json vs core(1.8 vs 1.2).