Mik*_*ail 27 java rest json jax-rs jackson
@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.怎么了?
Mik*_*ail 32
我解决了这个问题 我需要做的就是将jersey-json-1.6.jar库添加到项目中(这不是泽西的一部分)
Kam*_*ran 14
将以下参数添加到web.xml文件中的jersey servlet,这是最新1.x版本的jersey-servlet所必需的.
<init-param>
<param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
<param-value>true</param-value>
</init-param>
Run Code Online (Sandbox Code Playgroud)
其他答案对我不起作用,但我终于让它与JSON合作.
我正在使用jersey-bundle-1.17.jar(也尝试将asm-3.1.jar和jersey-json-1.17.jar添加到classpath中但仍然无效).我终于尝试下载包含12个不同罐子的拉链.一旦我将所有12个罐子添加到我的类路径中,我终于摆脱了错误,并且很好地返回了JSON.
我希望这有助于某人.
更新: 这是包含12个jar文件的zip文件的链接:jersey-archive-1.17.zip
Maven用户的另一个更新: 将以下内容添加到您的pom.xml中以分别获取12个jar:
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-servlet</artifactId>
<version>1.17.1</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-client</artifactId>
<version>1.17.1</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-json</artifactId>
<version>1.17.1</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-core</artifactId>
<version>1.17.1</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-server</artifactId>
<version>1.17.1</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-core-asl</artifactId>
<version>1.9.2</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.2</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-jaxrs</artifactId>
<version>1.9.2</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-xc</artifactId>
<version>1.9.2</version>
</dependency>
<dependency>
<groupId>org.codehaus.jettison</groupId>
<artifactId>jettison</artifactId>
<version>1.1</version>
</dependency>
<dependency>
<groupId>javax.ws.rs</groupId>
<artifactId>jsr311-api</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>asm</groupId>
<artifactId>asm</artifactId>
<version>3.1</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
小智 6
我使用谷歌应用程序引擎并且在这方面也遇到了很多困难,如果你使用jersey-bundle-1.17.jar大多数东西都可以工作,直到你添加
<init-param>
<param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
<param-value>true</param-value>
</init-param>
Run Code Online (Sandbox Code Playgroud)
你会得到很多奇怪的信息.这是因为你错过了一些杰克逊罐子.如果你去泽西主页下载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 ->
Run Code Online (Sandbox Code Playgroud)
添加jackson-xc-1.9.2.jar可以解决下面这个问题
java.lang.NoClassDefFoundError:org/codehaus/jackson/xc/JaxbAnnotationIntrospector
我希望这有助于某人.
归档时间: |
|
查看次数: |
35333 次 |
最近记录: |