hen*_*e83 6 json jax-rs jaxb jersey jackson
我正在使用Jersey为服务器组件创建Web服务.不幸的是我的JSON响应格式有问题,因为数据总是格式化为字符串.
我有一个带有不同字段类型的简单JAXB注释POJO:
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class JaxbPojo {
@XmlElement(name = "id_64")
private Long id;
@XmlElement(name = "desc")
private String description;
private Boolean active;
// getters and setters
..
}
Run Code Online (Sandbox Code Playgroud)
和一个简单的资源,返回传入的对象:
@Path("/jaxb_pojo")
public class JaxbPojoResource {
@POST
@Consumes({ MediaType.APPLICATION_JSON })
@Produces({ MediaType.APPLICATION_JSON })
public JaxbPojo processBidRequest(JaxbPojo pojo) {
return pojo;
}
}
Run Code Online (Sandbox Code Playgroud)
使用以下JSON数据向资源发送请求时,将在资源方法内正确填充该对象.但返回的JSON数据的字段类型始终格式化为字符串:
me@host:/tmp $ cat simple_jaxb_pojo
{"id_64":99,"desc":"simple JAXB POJO","active":true}
me@host:/tmp $ curl -X POST -H "Content-Type: application/json" --data-binary @simple_jaxb_pojo http://localhost/srvr/rest/jaxb_pojo
{"id_64":"99","desc":"simple JAXB POJO","active":"true"}
Run Code Online (Sandbox Code Playgroud)
所有使用过的jar文件(jsr311-api-1.1.1.jar,jersey-core-1.6.jar,jersey-json-1.6.jar,jersey-server-1.6.jar)都直接包含在tomcat/lib路径中.JAX-RS库通过Maven pom.xml使用,范围为"提供":
<dependency>
<groupId>javax.ws.rs</groupId>
<artifactId>jsr311-api</artifactId>
<version>1.1.1</version>
<scope>provided</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)
我的web.xml看起来像这样:
<servlet>
<servlet-name>RestServlet</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>com.rest.RestResourcesApplication</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
..
<servlet-mapping>
<servlet-name>RestServlet</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)
我是否遗漏了某些东西,或者我可能必须以一种使用我的POJO类型的方式明确配置Jackson.我对这个主题相当新,所以我发布了我的每一个信息.我希望有人能帮帮忙.
有趣的问题。我不确定为什么会发生这种情况,但尝试添加:
<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)
到 web.xml 中的 Jersey servlet 定义。我认为 Jersey 需要它来生成 JSON,但是当我删除这个 init-param 时,我看到了与您遇到的相同问题。
| 归档时间: |
|
| 查看次数: |
4487 次 |
| 最近记录: |