Jersey客户端unmarshall JSON包含根元素错误

时间:2015-07-24 09:02:20

标签: java json jersey-client

我正在连接到我无法控制的远程服务器。 发回的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字符串?

2 个答案:

答案 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)

您需要和公司类

中的默认(空)构造函数