【发布时间】:2012-10-24 11:50:13
【问题描述】:
我正在使用 Jersey API 实现简单的 RESTful 网络服务。我的服务器项目托管在 Apache Tomcat 6.0 版上,它包含 asm-3.0.jar、jersey-bundle-1.9.1.jar 和 jsr311-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 (ver 2.0.2) 将服务器响应中的 json 实体解析回 UserItem 类的对象。
我错过了什么吗?或者这是一个错误?
【问题讨论】:
标签: java json rest jersey jackson