java - Jersey 客户端 - 如何通过 POST 请求以表单形式发送列表

标签 java json rest jakarta-ee jersey

我正在使用 jersey 客户端向 Web 服务器发送 POST 请求。我通常使用键值对构建一个 Form 对象。但是,我现在必须在请求中发送列表。这是我的代码的删节版本

// 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 bad request 错误。当我直接发送请求时

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

我没有任何问题。提前致谢!

最佳答案

鉴于您的示例,基于典型的 POJO 序列化,您需要的不是 List<Phone>但是一个有成员的类(class) phones类型List<Phone> ,否则有效负载将如下所示:

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

首先,您需要一个具有 JSON 序列化功能的 Jersey 客户端。您需要包括 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);

关于java - Jersey 客户端 - 如何通过 POST 请求以表单形式发送列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31302858/

相关文章:

Java 音频无法在 jar 文件中播放

java while循环内存泄漏

java ->>> 使用继承的 Hibernate 示例 <<<

javascript - 使用 moment.js 转换 MongoDate

java - Spring Boot 中的 @PathVariable 在 URL 中带有斜杠

angular - Angular2 中的 Http.DELETE 请求正文

java - 如何使用 Sesame 解析 SPARQL 查询中的 OPTIONAL 语句?

javascript - 在nodejs中通过ajax获取接收到的JSON的值

json - 从 JSON 数据提升访问 float 组

node.js - Ping Angular 2 应用程序