【发布时间】:2016-01-06 23:58:51
【问题描述】:
我正在构建一个 Neo4J 插件,使用 jersey-json 来解析我的 POJO 与 json 之间的关系。问题是我的 REST 服务将数字作为字符串返回。
如果 POJO 看起来像这样:
@XmlRootElement
public class Item {
private Integer value = 5;
private int primitiveValue = 6;
public Item() {}
public Integer getValue() {
return value;
}
public int getPrimitiveValue() {
return primitiveValue;
}
}
我得到一个如下所示的 JSON 对象:
{
value: "5",
primitiveValue: "6"
}
但我希望它是这样的:
{
value: 5,
primitiveValue: 6
}
我的资源如下所示:
@GET
@Path("/item")
@Produces(MediaType.APPLICATION_JSON)
public Response getItem() {
return Response.ok(new Item()).build();
}
我的 pom 看起来像这样:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>my.project.id</groupId>
<artifactId>neo4j-extension</artifactId>
<version>1.0</version>
<properties>
<neo4j.version>2.2.0</neo4j.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>javax.ws.rs</groupId>
<artifactId>javax.ws.rs-api</artifactId>
<version>2.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.neo4j</groupId>
<artifactId>neo4j</artifactId>
<version>${neo4j.version}</version>
</dependency>
<dependency>
<groupId>org.neo4j</groupId>
<artifactId>server-api</artifactId>
<version>${neo4j.version}</version>
</dependency>
<dependency>
<groupId>org.neo4j.app</groupId>
<artifactId>neo4j-server</artifactId>
<version>${neo4j.version}</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-json</artifactId>
<version>1.18.1</version>
</dependency>
</dependencies>
</project>
你知道我该如何解决这个问题吗?为什么将数字字段解析为字符串的默认行为?
解决方案
根据 Stefan Armbruster 的建议,我将以下依赖项添加到我的 pom 中,并将所有依赖的 jars 添加到我的 /plugins 文件夹中。
<dependency>
<groupId>com.fasterxml.jackson.jaxrs</groupId>
<artifactId>jackson-jaxrs-json-provider</artifactId>
<version>2.6.2</version>
</dependency>
并从我的 POJO 中删除了 @XmlRootElement 注释。
与以前的不同之处在于,我在响应中得到了所有空值。使用@XmlRootElement 注释,从响应中删除空值,但我认为这不会成为问题。
【问题讨论】: