1

我正在使用 Jersey API 实现简单的 RESTful 网络服务。我的服务器项目托管在 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 类的对象。

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

4

1 回答 1

1

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

你可以做两件事:

于 2012-10-24T15:05:13.727 回答