Jersey Client - 变量类型被忽略
Jersey Client - Variable types are ignored
我正在使用 Sun 版本 1.19 的 Jersey 客户端...
当我发送一个带有 JSON 的放置请求时(但其他所有请求类型可能也是如此)它用引号序列化数字类型的变量,而不是作为纯数字。
示例:
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"}
怎么了?
问题的解决很简单。
只需在实例化客户端对象时在ClientConfig中定义一个POJO-Mapping即可:
ClientConfig cc = new DefaultClientConfig();
cc.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE);
client = Client.create(cc);
我正在使用 Sun 版本 1.19 的 Jersey 客户端...
当我发送一个带有 JSON 的放置请求时(但其他所有请求类型可能也是如此)它用引号序列化数字类型的变量,而不是作为纯数字。
示例:
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"}
怎么了?
问题的解决很简单。
只需在实例化客户端对象时在ClientConfig中定义一个POJO-Mapping即可:
ClientConfig cc = new DefaultClientConfig();
cc.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE);
client = Client.create(cc);