gpt4 book ai didi

java - Jersey 客户端解码 JSON 包含根元素错误

转载 作者:行者123 更新时间:2023-12-01 11:17:42 24 4
gpt4 key购买 nike

我正在连接到我无法控制的远程服务器。发送回的 JSON 包含根元素。

{"company":{"name":"Personal"}}

当尝试将字符串解码到公司对象时,出现以下错误:org.codehaus.jackson.map.exc.UnrecognizedPropertyException:无法识别的字段“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 字符串?

最佳答案

创建一个将 Company 对象作为属性的包装器类。例如,

@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 的建议,在 @XmlRootElement 中包含 name 属性也有效:@XmlRootElement(name="company")

关于java - Jersey 客户端解码 JSON 包含根元素错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31606352/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com