如何使用JAXB使用Jersey 1.6生成JSON输出

@XmlRootElement public class Todo { private String s = "test"; public String getS() { return s; } public void setS(String s) { this.s = s; } } 

和服务:

 @Path("/test") public class Service { @GET @Produces({MediaType.APPLICATION_JSON }) public List getAllGadgets() { return Arrays.asList(new Todo[] { new Todo() }); } } 

我的web.xml:

  Jersey REST Service com.sun.jersey.spi.container.servlet.ServletContainer  com.sun.jersey.config.property.packages com.test  1   Jersey REST Service /rest/*  

如果我将MediaType.APPLICATION_XML设置为生成注释,则所有这些都有效。 但对于JSON,我得到以下exception:

SEVERE:映射exception响应: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一起使用而无需任何额外的编程。 怎么了?

我解决了这个问题 我需要做的就是将jersey-json-1.6.jar库添加到项目中(这不是jersey的一部分)

将以下参数添加到web.xml文件中的jersey servlet,这是最新1.x版本的jersey-servlet所必需的。

   com.sun.jersey.api.json.POJOMappingFeature true  

我使用谷歌应用程序引擎并且在这方面也遇到了很多困难,如果你使用jersey-bundle-1.17.jar大多数东西都可以使用,直到你添加

  com.sun.jersey.api.json.POJOMappingFeature true  

你会得到很多奇怪的信息。 这是因为你错过了一些jacksonjar子。 如果你去泽西主页下载zip和捆绑包。 只需删除捆绑包,然后从zip中删除需要在类路径中添加4个jackson jar,您应该可以正常运行而不会出现任何错误。

添加jackson-jaxrs-1.9.2.jar可以解决以下错误

 SEVERE: The registered message body writers compatible with the MIME media type are: application/json -> 

添加jackson-xc-1.9.2.jar可以解决下面这个问题

java.lang.NoClassDefFoundError:org / codehaus / jackson / xc / JaxbAnnotationIntrospector

我希望这有助于某人。

其他答案对我不起作用,但我终于让它与JSON合作。

我正在使用jersey-bundle-1.17.jar(也尝试使用asm-3.1.jar和jersey-json-1.17.jar添加到classpath但仍然无效)。 我终于尝试下载包含12个不同jar子的拉链。 一旦我将所有12个jar子添加到我的类路径中,我终于摆脱了错误,并且很好地返回了JSON。

我希望这有助于某人。

更新:这是包含12个jar文件的zip文件的链接: jersey-archive-1.17.zip

Maven用户的另一个更新:将以下内容添加到您的pom.xml中以分别获取12个jar:

   com.sun.jersey jersey-servlet 1.17.1   com.sun.jersey jersey-client 1.17.1   com.sun.jersey jersey-json 1.17.1   com.sun.jersey jersey-core 1.17.1   com.sun.jersey jersey-server 1.17.1   org.codehaus.jackson jackson-core-asl 1.9.2   org.codehaus.jackson jackson-mapper-asl 1.9.2   org.codehaus.jackson jackson-jaxrs 1.9.2   org.codehaus.jackson jackson-xc 1.9.2   org.codehaus.jettison jettison 1.1   javax.ws.rs jsr311-api 1.1.1   asm asm 3.1  

如果不使用@XmlRootElement注释POJO(或基础POJO), @XmlRootElement引发OP列出的消息正文@XmlRootElement

例如:

 @XmlRootElement public class BaseBean { private Boolean success = Boolean.TRUE; private String message; /** * Empty constructor to satisfy requirements of JAXRS. */ public BaseBean() {} /** * Returns a simple message to accompany the success/failure. * @return */ public String getMessage() { return message; } /** * Sets the message (if required). * @param message */ public void setMessage(String message) { this.message = message; } /** * Returns a flag indicating whether a request for content was * successful. * @return */ public Boolean getSuccess() { return success; } /** * Marks the success of a request for content. * @param success */ public void setSuccess(Boolean success) { this.success = success; } } 

Kamran的回答对我有用,只是为了扩展xml:

   JerseyServletContainer com.sun.jersey.spi.spring.container.servlet.SpringServlet  com.sun.jersey.api.json.POJOMappingFeature true