我正在使用 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(2.0.2 版)将服务器响应中的 json 实体解析回 UserItem 类的对象。
我错过了什么吗?或者这是一个错误?