私はJerseyAPIを使用して単純なRESTfulWebサービスを実装しています。私のサーバープロジェクトはApacheTomcatver 6.0でホストされており、asm-3.0.jar、jersey-bundle-1.9.1.jar、jsr311-api-1.1.1.jarが含まれています。
2つのリソースクラスがあります。1つは、オブジェクトUserItemsResource
のコレクションを表すことを目的としていUserItem
ます。もう1つは、単一のリソース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」として生成されていることがわかります。これは、ASCII文字「M」に相当します。クライアントコードが正常に解析して「M」に戻すことができるように、これは「M」としてのみ表示される必要があると思います。私はJacksonAPI(ver 2.0.2)を使用して、UserItemクラスのオブジェクトに戻るサーバー応答のjsonエンティティを解析しています。
私は何かが足りないのですか?それともこれはバグですか?