Jersey客户端 - 忽略变量类型

时间:2015-06-05 11:49:48

标签: java json jersey jersey-client

我正在使用Sun版本1.19的Jersey客户端......

当我发送带有JSON的put请求(但也可能是其他所有请求类型)时,它会使用引号序列化Number类型的变量,而不是普通数字。

示例:

User.java

package de.topazmedia.component.api.rest.client.ressource;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
@XmlAccessorType(XmlAccessType.PUBLIC_MEMBER)
public class User {

Long id;
String username;


public Long getId() {
    return id;
}
public void setId(Long id) {
    this.id = id;
}    

public String getUsername() {
    return id;
}
public void setUsername(Long id) {
    this.id = id;
} 

}

Test.java

import javax.ws.rs.core.MediaType;

import org.json.JSONObject;

import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.WebResource;
import com.sun.jersey.api.client.WebResource.Builder;

public class Test {

public static void main(String[] args) {
User user = new User();

user.setId(1);
user.setUsername("Test");

ClientResponse response = null;

WebResource webResource = client.resource(http://192.168.23.56:9181/v1/users/" + user.getId());

Builder builder = webResource.header("Accept-Language", "de").type(MediaType.APPLICATION_JSON_TYPE).accept(MediaType.APPLICATION_JSON_TYPE);

response = builder.put(ClientResponse.class, user);
}
}

我在请求中作为实体放入的“用户JSON”现已转换为

{"id":"1","username":"Test"}

但它应该没有这样的id的叛道:

{"id":1,"username":"Test"}

有什么问题?

1 个答案:

答案 0 :(得分:0)

问题的解决方案非常简单。

在实例化客户端对象时,只需在ClientConfig中定义POJO-Mapping:

ClientConfig cc = new DefaultClientConfig();

cc.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE);

client = Client.create(cc);