簡體   English   中英

Jersey將字符值序列化為ASCII等效數字字符串

[英]Jersey serializes character value to ASCII equivalent numeric string

我正在使用Jersey API實現簡單的RESTful Web服務。 我的服務器項目托管在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” ,它與ASCII字符“ M”等效。 我認為這應該只是“ M”,這樣我的客戶端代碼才能成功地將其解析回“ M”。 我正在使用Jackson API(2.0.2版)將服務器響應中的json實體解析回UserItem類的對象。

我想念什么嗎? 還是這是一個錯誤?

Jersey支持很少的JSON表示法,並且每種形式在生成的JSON的外觀上都略有不同。 您可以在此JavaDoc中看到符號之間的區別。 默認的是MAPPED ,您已經在JSON輸出中將數字引號引起來。

您可以做兩件事:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM