【Spring】RestTemplate中postForEntity其中参数为数组或者List

0.使用场景

RestTemplate.postForEntity() 方法中的参数有数组或者List

因为是对接其他人的接口,不知道服务端是怎么写的, 也不知道是什么语言写的
所以其他办法不对,可以尝试下这个方法

1.解决办法

1.1 spring boot 版本

1
2
3
4
5
6
7
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.3.7.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>

1.2 RestTemplate 创建Bean

1
2
3
4
@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder) {
return builder.additionalMessageConverters(new FastJsonHttpMessageConverter()).build();
}

1.3 参数入参时(重点)

1
2
3
MultiValueMap<String, Object> params = new LinkedMultiValueMap<>(2);
params.add("access_token" , token);
params.addAll("username[]" , usernames);

重点说明:
1.需要使用addAll添加参数
2.key需要在key的值后加[]
3.value需要为list类型

2.完整示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
public JSONArray accountDetails(String token, List<String> usernames) {
String url = "xxxxxxxxxxxxxxxxxx";
// @formatter:off
MultiValueMap<String, Object> params = new LinkedMultiValueMap<>(2);
params.add("access_token" , token);
params.addAll("username[]" , usernames);
// @formatter:on
JSONObject json = (JSONObject) restTemplateUtils.post(url, params, JSONObject.class);
log.info("查询响应:{}", json.toJSONString());
if (json.getInteger("ret") == 0) {
return json.getJSONObject"data").getJSONArray("data");
}
return null;
}

/**
* 封装的post通用部分
*
* @param url 请求路径
* @param params 参数
* @param clazz 响应类型
* @return 请求成功返回body, 请求失败抛出异常
*/
public Object post(String url, MultiValueMap<String, Object> params, Class<?> clazz) {
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
HttpEntity<MultiValueMap<String, Object>> request = new HttpEntity<>(params, headers);
ResponseEntity<?> response = restTemplate.postForEntity(url, request, clazz);
if (response.getStatusCode() != HttpStatus.OK) {
throw new ResponseStatusException(response.getStatusCode(), "请求出错");
}
return response.getBody();
}
发个牢骚

所有的博客都是互相抄啊抄,就不能自己有点探索精神么

从下午查询资料,到现在快2点.百度也好,谷歌也好,来来回回就那么几个重复的答案

写代码真难


【Spring】RestTemplate中postForEntity其中参数为数组或者List
https://www.yangxj96.com/Spring/RestTemplatePostForEntityParamArray/
作者
道一
发布于
2022年12月24日
许可协议