1

私はJerseyAPIを使用して単純なRESTfulWebサービスを実装しています。私のサーバープロジェクトはApacheTomcatver 6.0でホストされており、asm-3.0.jarjersey-bundle-1.9.1.jarjsr311-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エンティティを解析しています。

私は何かが足りないのですか?それともこれはバグですか?

4

1 に答える 1

1

ジャージーはいくつかのJSON表記をサポートしており、それぞれが結果のJSONがどのように見えるかについてわずかに異なる規則を持っています。このJavaDocで表記の違いを確認できます。デフォルトではMAPPED、すでに知っているように、JSON出力の数値を引用符で囲みます。

できることは2つあります。

于 2012-10-24T15:05:13.727 に答える