gpt4 book ai didi

java - 如何防止 Jersey 在解析为 json 时将数字字段解析为字符串?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:57:22 26 4
gpt4 key购买 nike

我正在构建一个 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,并将所有相关的 jar 添加到我的 /plugins 文件夹中。

<dependency>
<groupId>com.fasterxml.jackson.jaxrs</groupId>
<artifactId>jackson-jaxrs-json-provider</artifactId>
<version>2.6.2</version>
</dependency>

并从我的 POJO 中删除了 @XmlRootElement 注释。

与之前不同的是,我在响应中得到了所有空值。使用 @XmlRootElement 注释,从响应中删除空值,但我认为这不会成为问题。

最佳答案

尝试将您的 JAX-RS 方法更改为:

@GET
@Path("/item")
@Produces(MediaType.APPLICATION_JSON)
public Item getItem() {
return new Item();
}

如果报错,修改 http://mvnrepository.com/artifact/org.glassfish.jersey.media/jersey-media-json-jackson http://mvnrepository.com/artifact/com.fasterxml.jackson.jaxrs/jackson-jaxrs-json-provider/2.6.2到您的依赖项(并确保此 jar 也部署到 plugins 文件夹)。

关于java - 如何防止 Jersey 在解析为 json 时将数字字段解析为字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33031436/

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