我正在连接到我无法控制的远程服务器。 发回的JSON包含根元素。
{"company":{"name":"Personal"}}
当尝试将字符串解组为公司对象时,我收到以下错误:org.codehaus.jackson.map.exc.UnrecognizedPropertyException: Unrecognized field "company"
以下是我的测试类中的配置。我正在使用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字符串?
答案 0 :(得分:1)
创建一个将Company对象作为属性的Wrapper类。如,
@XmlRootElement
public class CompanyResponse{
private String company;
public String getCompany() {
return company;
}
public void setCompany(String company) {
this.company= company;
}
}
然后,使用此类从服务器获取响应。 即,更改以下
Company json = response.getEntity(Company.class);
到
Company json = response.getEntity(CompanyResponse.class).getCompany();
更新
根据@JuanDM的建议,name
中的@XmlRootElement
属性也可以使用:
@XmlRootElement(name="company")
答案 1 :(得分:0)
您需要和公司类
中的默认(空)构造函数