[英]Jersey serializes character value to ASCII equivalent numeric string
我正在使用Jersey API實現簡單的RESTful Web服務。 我的服務器項目托管在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” ,它與ASCII字符“ M”等效。 我認為這應該只是“ M”,這樣我的客戶端代碼才能成功地將其解析回“ M”。 我正在使用Jackson API(2.0.2版)將服務器響應中的json實體解析回UserItem類的對象。
我想念什么嗎? 還是這是一個錯誤?
Jersey支持很少的JSON表示法,並且每種形式在生成的JSON的外觀上都略有不同。 您可以在此JavaDoc中看到符號之間的區別。 默認的是MAPPED
,您已經在JSON輸出中將數字引號引起來。
您可以做兩件事:
NATURAL
JSON表示法,可以按您期望的方式處理數字。 為此,您需要提供一個自定義ContextResolver並將其注冊到您的應用程序中。 如何實現此目的的示例可以在Jersey用戶指南 ( JSON支持-配置選項 )中找到,也可以在示例json-from-jaxb之一中找到 (請參閱JAXBContextResolver )。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.