gpt4 book ai didi

json - JAXB 注释 POJO 用于 Jersey 中的 JSON 序列化为每个字段类型返回字符串

转载 作者:行者123 更新时间:2023-12-04 15:46:24 25 4
gpt4 key购买 nike

我正在使用 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
..
}

和一个简单的资源,返回传入的对象:
@Path("/jaxb_pojo")
public class JaxbPojoResource {

@POST
@Consumes({ MediaType.APPLICATION_JSON })
@Produces({ MediaType.APPLICATION_JSON })
public JaxbPojo processBidRequest(JaxbPojo pojo) {
return pojo;
}

}

当使用以下 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"}

所有用到的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 使用,范围为“provided”:
<dependency>
<groupId>javax.ws.rs</groupId>
<artifactId>jsr311-api</artifactId>
<version>1.1.1</version>
<scope>provided</scope>
</dependency>

我的 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>

我是否遗漏了什么,或者我是否必须以使用我的 POJO 类型的方式明确配置 Jackson。我对这个主题相当陌生,所以我发布了我在这方面的所有信息。我希望有人能帮帮忙。

最佳答案

有趣的问题。我不确定为什么会发生这种情况,但请尝试添加:

    <init-param>
<param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
<param-value>true</param-value>
</init-param>

到 web.xml 中的 Jersey servlet 定义。我认为 Jersey 需要它来生成 JSON,但是当我删除这个 init-param 时,我看到了你遇到的同样问题。

关于json - JAXB 注释 POJO 用于 Jersey 中的 JSON 序列化为每个字段类型返回字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12953092/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com