Jersey客户端 - 如何使用POST请求在表单中发送List

时间:2015-07-08 20:17:04

标签: java json rest java-ee jersey

我正在使用jersey客户端将POST请求发送到Web服务器。我一般都在构建一个带有键值对的 Form 对象。但是,我现在必须在我的请求中发送 List 。这是我的代码的精简版

// Phone is a POJO consisting of a few Strings
public void request(List<Phone> phones) {
     Form form = new Form();
     form.add("phones", phones);
     ClientResponse response = WebService.getResponseFromServer(form);
     String output = response.getEntity(String.class);
     System.out.println(output);
}

public static ClientResponse getResponseFromServer(Form form) {
    Client client = createClient();
    WebResource webResource = client.resource(PATH);

    return webResource.type(MediaType.APPLICATION_FORM_URLENCODED).post(ClientResponse.class, form);
}

不幸的是,这似乎不起作用,我收到400错误请求错误。当我直接发送请求时

{"phones":[{"areaCode":"217","countryCode":"01","number":"3812565"}]}

我没有问题。提前谢谢!

1 个答案:

答案 0 :(得分:1)

根据您的示例,基于典型的POJO序列化,您需要的不是List<Phone>,而是具有类型phones的成员List<Phone>的类,否则有效负载将是看起来像这样:

[{"areaCode":"217","countryCode":"01","number":"3812565"}]

首先,您需要的是具有JSON序列化功能的泽西客户端。您需要在依赖项中包含jersey-json(以及jersey-client)。 Maven中的示例:

<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-client</artifactId>
    <version>1.19</version>
</dependency>
<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-json</artifactId>
    <version>1.19</version>
</dependency>

像这样创建您的客户:

ClientConfig clientConfig = new DefaultClientConfig();
clientConfig.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE);
Client client = Client.create(clientConfig);

假设您有一个变量phones,这是POJO,您可以这样称呼:

ClientResponse response = webResource.accept(MediaType.APPLICATION_JSON_TYPE).type(MediaType.APPLICATION_JSON_TYPE).post(ClientResponse.class, phones);