java - Jersey 将字符值序列化为 ASCII 等效数字字符串

标签 java json rest jersey jackson

我正在使用 Jersey API 实现简单的 RESTful Web 服务。我的服务器项目托管在 Apache Tomcat 6.0 版上,它包含 asm-3.0.jarjersey-bundle-1.9.1.jarjsr311-api-1.1.1.jar

我有两个资源类。其中之一是UserItemsResource,它旨在表示UserItem 对象的集合。另一种是 UserItemResource,它代表单个 UserItem 资源。

下面是 UserItemsResource 类的代码:

@Path("/useritems")
public class UserItemsResource {

    @Context
    UriInfo uriInfo;

    @Context
    Request request;

    @Path("{userId}")
    public UserItemResource getUserItemResource(@PathParam("userId") long userId) {
        return new UserItemResource(uriInfo, request, userId);
    }
}

UserItemResource 类:

public class UserItemResource {
    @Context
    UriInfo uriInfo;

    @Context
    Request request;

    private long userId;

    public UserItemResource(UriInfo uriInfo, Request request, long userId) {
        this.uriInfo = uriInfo;
        this.request = request;
        this.userId = userId;
    }

    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public UserItem getUserItem() {
        return new UserItem(userId, 'M', "Pawan");
    }
}

以及UserItem 类:

@XmlRootElement
public class UserItem {
    private long userId;
    private char sex;
    private String displayName;

    public UserItem() {

    }

    public UserItem(long userId, char sex, String displayName) {
        this.userId = userId;
        this.sex = sex;
        this.displayName = displayName;
    }

    public long getUserId() {
        return userId;
    }

    public char getSex() {
        return sex;
    }

    public String getDisplayName() {
        return displayName;
    }

    public void setUserId(long userId) {
        this.userId = userId;
    }

    public void setSex(char sex) {
        this.sex = sex;
    }

    public void setDisplayName(String displayName) {
        this.displayName = displayName;
    }
}

当我调用资源(例如 /useritems/101)时,我从服务器收到以下响应。

HTTP/1.1 200 OK
Date: Wed, 24 Oct 2012 11:30:35 GMT
Transfer-Encoding: chunked
Content-Type: application/json
Server: Apache-Coyote/1.1

{
  "displayName": "Pawan",
  "sex": "77",
  "userId": "101"
}

您可以看到“sex”属性的值生成为“77”,它相当于字符“M”的ASCII。我相信这应该只是“M”,以便我的客户端代码可以成功地将其解析回“M”。我正在使用 Jackson API(版本 2.0.2)将服务器响应中的 json 实体解析回 UserItem 类的对象。

我错过了什么吗?或者这是一个错误?

最佳答案

Jersey 支持很少的 JSON 表示法,并且每种表示法对于生成的 JSON 的外观都有稍微不同的约定。您可以在 JavaDoc 中看到符号之间的差异。 。默认值是 MAPPED,正如您已经发现的那样,它将在 JSON 输出中的数字周围加上引号。

您可以做两件事:

关于java - Jersey 将字符值序列化为 ASCII 等效数字字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13048658/

相关文章:

php - 从 mysql 编写正确的 JSON 结构

ios - Objective-C RestKit 无输出

java - Android REST Web 服务

Java,如何通过移位拆分字符串

java - 在 Guava 中使用 FluentIterables 为集合中的每个元素添加索引号

java - 我想我在这里遗漏了一些东西——string.replace()

javascript - NodeJS 未定义的 JSON 对象

java - 如何在LWJGL中移动物体?

javascript - 使用 CSS 突出显示 JSONPath 中选定的文本

http - Google Calendar V3 REST API 中的批量请求