今天在调用一个第三方的系统的时候,需要把请求头的content type 设置为application/x-www-form-urlencoded,我开始的时候就直接使用dto包装到HttpEntity,结果一直报错。
具体代码如下:
TokenReqDto tokenReqDto = new TokenReqDto();
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
HttpEntity<TokenReqDto> entity = new HttpEntity<>(tokenReqDto,headers);
ResponseEntity<TokenRespDto> resp = restTemplate.postForEntity(identityUrl,entity, TokenRespDto.class);
return resp;
经过分析查询,是要修改为用MultiValueMap来填充参数,dto的方式spring 识别不了。
修改后的代码如下,具体的业务参数我就删了。
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
params.add("grant_type", "client_credentials");
params.add("client_type", "service");
HttpEntity<MultiValueMap<String, String>> requestEntity = new HttpEntity<>(params, headers);
ResponseEntity<TokenRespDto> tokenEntity = restTemplate.exchange(identityUrl, HttpMethod.POST, requestEntity, TokenRespDto.class);
return tokenEntity;
然后部署验证,发现成功了。