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"; MultiValueMap<String, Object> params = new LinkedMultiValueMap<>(2); params.add("access_token" , token); params.addAll("username[]" , usernames); 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; }
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点.百度也好,谷歌也好,来来回回就那么几个重复的答案
写代码真难