RestTemplate中postForEntity其中参数为数组或者List

一.使用场景

RestTemplate.postForEntity() 方法中的参数有数组或者List
因为是对接其他人的接口,不知道服务端是怎么写的, 也不知道是说明语言写的
所以其他办法不对,可以尝试下这个方法

二.解决办法

2.1 spring boot 版本

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-dependencies</artifactId>
  <version>2.3.7.RELEASE</version>
  <type>pom</type>
  <scope>import</scope>
</dependency>

2.2 RestTemplate 创建Bean

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

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类型

三.完整示例

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();
}

RestTemplate中postForEntity其中参数为数组或者List
https://yangxj96.github.io/2022/12/java/b002/
作者
yangxj96
发布于
2022年12月22日
许可协议