解析到json时,如何防止Jersey将数字字段解析为字符串?

大卫·伯格

我正在使用jersey-json构建Neo4J插件,以将我的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批注,从响应中删除了空值,但是我认为这不会成为问题。

斯蒂芬·阿姆布鲁斯特(Stefan Armbruster)

尝试将您的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文件夹中)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章