You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Jersey Client模拟发送携带MultivaluedMap作为表单数据的POST请求

MultivaluedMap作为表单数据发送POST请求的实现方案

MultivaluedMap是JAX-RS规范中定义的多值映射结构,原生支持作为application/x-www-form-urlencoded类型的表单参数提交,不同工具栈的实现方式如下:

1. JAX-RS 原生客户端(Jersey/RESTEasy)

这类框架原生支持MultivaluedMap作为表单入参,构造完成后直接传入请求实体即可:

import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Entity;
import javax.ws.rs.core.MultivaluedHashMap;
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.core.Response;

// 构造表单数据,旧版本Jersey也可使用MultivaluedMapImpl
MultivaluedMap<String, String> formData = new MultivaluedHashMap<>();
formData.add(FRIENDLY_NAME, tenDlcRegistration.getSiteName());
formData.add(EMAIL, notificationEmail);
formData.add(POLICY_SID, policySid);

// 发送POST请求
Client client = ClientBuilder.newClient();
Response response = client.target("目标接口地址")
  .request()
  .post(Entity.form(formData));

2. Apache HttpClient

需要先将MultivaluedMap转换为HttpClient要求的NameValuePair列表:

import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

// MultivaluedMap转NameValuePair列表
List<NameValuePair> params = new ArrayList<>();
for (Map.Entry<String, List<String>> entry : formData.entrySet()) {
    String key = entry.getKey();
    for (String value : entry.getValue()) {
        params.add(new BasicNameValuePair(key, value));
    }
}

// 执行请求
try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
    HttpPost httpPost = new HttpPost("目标接口地址");
    httpPost.setEntity(new UrlEncodedFormEntity(params));
    httpClient.execute(httpPost);
} catch (Exception e) {
    e.printStackTrace();
}

3. Spring RestTemplate

需要先将JAX-RS的MultivaluedMap转换为Spring自带的MultiValueMap结构:

import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;
import java.util.Map;

// 转换为Spring的MultiValueMap
MultiValueMap<String, String> springFormData = new LinkedMultiValueMap<>();
for (Map.Entry<String, List<String>> entry : formData.entrySet()) {
    springFormData.addAll(entry.getKey(), entry.getValue());
}

// 执行请求
RestTemplate restTemplate = new RestTemplate();
String result = restTemplate.postForObject("目标接口地址", springFormData, String.class);

以上所有实现都会自动添加Content-Type: application/x-www-form-urlencoded请求头,无需手动配置。如果接口需要鉴权、自定义请求头等参数,在请求构造阶段自行添加即可。

内容的提问来源于stack exchange,提问作者Polavarapu Rajasekhar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 17:36:03