Jersey 客户端解组 JSON 包含根元素错误
Jersey client unmarshall JSON include root element error
我正在连接到我无法控制的远程服务器。
发回的 JSON 包含一个根元素。
{"company":{"name":"Personal"}}
尝试将字符串解组为公司对象时出现以下错误:org.codehaus.jackson.map.exc.UnrecognizedPropertyException: Unrecognized field "company"
以下是我在测试中的配置class。我正在使用 JUnit 4.12、Jersey-client 1.19 和 Jersey-json 1.19
@XmlRootElement
public class Company{
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Company{" + "name=" + name + '}';
}
}
测试客户端:
public class CompanyResourceTest {
@Test
public void createClient() {
ClientConfig clientConfig = new DefaultClientConfig();
clientConfig.getClasses().add(JacksonJsonProvider.class);
Client client = Client.create(clientConfig);
WebResource webResource = client.resource("http://localhost:8686/voucher-test/rest/company");
String companyName = "Personal";
ClientResponse response = webResource.accept(MediaType.APPLICATION_JSON).post(ClientResponse.class, companyName );
if (response.getStatus() != 200) {
throw new RuntimeException("Failed : HTTP error code : "
+ response.getStatus() + ", " + response.getStatusInfo());
}
Company json = response.getEntity(Company.class);
}
}
如何解组 JSON 字符串?
创建一个将 Company 对象作为 属性 的包装器 class。例如,
@XmlRootElement
public class CompanyResponse{
private String company;
public String getCompany() {
return company;
}
public void setCompany(String company) {
this.company= company;
}
}
然后,使用这个 class 从服务器获取响应。
即,更改以下内容
Company json = response.getEntity(Company.class);
到
Company json = response.getEntity(CompanyResponse.class).getCompany();
更新
正如@JuanDM 所建议的,在 @XmlRootElement
中包含 name
属性也有效:
@XmlRootElement(name="company")
您的公司需要默认(空)构造函数class
我正在连接到我无法控制的远程服务器。 发回的 JSON 包含一个根元素。
{"company":{"name":"Personal"}}
尝试将字符串解组为公司对象时出现以下错误:org.codehaus.jackson.map.exc.UnrecognizedPropertyException: Unrecognized field "company"
以下是我在测试中的配置class。我正在使用 JUnit 4.12、Jersey-client 1.19 和 Jersey-json 1.19
@XmlRootElement
public class Company{
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Company{" + "name=" + name + '}';
}
}
测试客户端:
public class CompanyResourceTest {
@Test
public void createClient() {
ClientConfig clientConfig = new DefaultClientConfig();
clientConfig.getClasses().add(JacksonJsonProvider.class);
Client client = Client.create(clientConfig);
WebResource webResource = client.resource("http://localhost:8686/voucher-test/rest/company");
String companyName = "Personal";
ClientResponse response = webResource.accept(MediaType.APPLICATION_JSON).post(ClientResponse.class, companyName );
if (response.getStatus() != 200) {
throw new RuntimeException("Failed : HTTP error code : "
+ response.getStatus() + ", " + response.getStatusInfo());
}
Company json = response.getEntity(Company.class);
}
}
如何解组 JSON 字符串?
创建一个将 Company 对象作为 属性 的包装器 class。例如,
@XmlRootElement
public class CompanyResponse{
private String company;
public String getCompany() {
return company;
}
public void setCompany(String company) {
this.company= company;
}
}
然后,使用这个 class 从服务器获取响应。 即,更改以下内容
Company json = response.getEntity(Company.class);
到
Company json = response.getEntity(CompanyResponse.class).getCompany();
更新
正如@JuanDM 所建议的,在 @XmlRootElement
中包含 name
属性也有效:
@XmlRootElement(name="company")
您的公司需要默认(空)构造函数class