RestTemple 使用踩坑记
2020-02-26 本文已影响0人
一个忙来无聊的人
一、依赖问题
我用的是 spring 4.0版本
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.0.0.RELEASE</version>
</dependency>
二、解决 no suitable HttpMessageConverter found for request type 问题
public static String postRequest(String url, Object request) {
RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8");
headers.setContentType(type);
headers.add("Accept", MediaType.APPLICATION_JSON.toString());
String reqStr = JSONObject.toJSONString(request);
HttpEntity<String> formEntity = new HttpEntity<>(reqStr, headers);
return restTemplate.postForObject(url, formEntity, String.class);
}
重点是以下代码
MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8");
headers.setContentType(type);
headers.add("Accept", MediaType.APPLICATION_JSON.toString());
三、文件上传并且带参数问题解决
这个问题的解决方式和下面问题在同一组代码中
四、RestTemple post文件上传乱码问题
public static String postFile(String url, File file, String systemCode) {
RestTemplate restTemplate = new RestTemplate();
//文件上传处理
FileSystemResource resource = new FileSystemResource(file);
MultiValueMap<String, Object> param = new LinkedMultiValueMap<>();
// 设置参数为文件以及设置传递的参数信息
param.add("file", resource);
param.add("systemCode", systemCode);
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.MULTIPART_FORM_DATA);
// 解决乱码问题
List<HttpMessageConverter<?>> cos = new ArrayList<>();
StringHttpMessageConverter stringHttpMessageConverter = new StringHttpMessageConverter(Charset.forName("utf-8"));
FormHttpMessageConverter formHttpMessageConverter = new FormHttpMessageConverter();
List<HttpMessageConverter<?>> cos2 = new ArrayList<>();
cos2.add(stringHttpMessageConverter);
cos2.add(new ByteArrayHttpMessageConverter());
cos2.add(new ResourceHttpMessageConverter());
formHttpMessageConverter.setPartConverters(cos2);
cos.add(formHttpMessageConverter);
cos.add(stringHttpMessageConverter);
restTemplate.setMessageConverters(cos);
HttpEntity<MultiValueMap<String, Object>> httpEntity = new HttpEntity<MultiValueMap<String, Object>>(param, headers);
//远程调用获取请求具体数据信息
ResponseEntity<String> responseEntity1 = restTemplate.exchange(url, HttpMethod.POST, httpEntity, String.class);
return responseEntity1.getBody();
}
五、其他解决乱码的方式--个人没有起作用
方式一:
RestTemplate restTemplate = new RestTemplate(requestFactory);
// 设置 restTemplate FormHttpMessageConverter 编码方式
List<HttpMessageConverter<?>> list = restTemplate.getMessageConverters();
for (HttpMessageConverter<?> httpMessageConverter : list) {
if(httpMessageConverter instanceof FormHttpMessageConverter) {
((FormHttpMessageConverter) httpMessageConverter).setCharset(Charset.forName(StandardCharsets.UTF_8.toString()));
}
}
restTemplate.setMessageConverters(list);
方式二:设置编码格式为utf8
restTemplate.getMessageConverters().set(1, new StringHttpMessageConverter(StandardCharsets.UTF_8));