首先上配置,由于restTemplate不支持一些返回格式,所以需要自己手动配置
/**
* @Description : restTemplate配置类
* @Author : wzkris
* @Version : V1.0.0
* @Date : 2022/12/1 10:02
*/
@Configuration
public class RestTemplateConfig {
@Bean
public RestTemplate restTemplate() {
OkHttp3ClientHttpRequestFactory factory = new OkHttp3ClientHttpRequestFactory();
factory.setReadTimeout(3000);
factory.setConnectTimeout(3000);
RestTemplate restTemplate = new RestTemplate(factory);
//增强转换器
MappingJackson2HttpMessageConverter jackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();
//设置编码
jackson2HttpMessageConverter.setDefaultCharset(StandardCharsets.UTF\_8);
jackson2HttpMessageConverter.setSupportedMediaTypes(Arrays.asList(
MediaType.TEXT\_HTML,
MediaType.TEXT\_PLAIN,
MediaType.APPLICATION\_OCTET\_STREAM,
MediaType.APPLICATION\_JSON,
MediaType.MULTIPART\_FORM\_DATA,
MediaType.APPLICATION\_XML));
setMessageConverter(restTemplate, jackson2HttpMessageConverter);
return restTemplate;
}
/\*\*
\* 设置消息转换器
\*/
private void setMessageConverter(RestTemplate restTemplate, MappingJackson2HttpMessageConverter httpMessageConverter) {
List<HttpMessageConverter<?>> messageConverters = restTemplate.getMessageConverters();
Iterator<HttpMessageConverter<?>> iterator = messageConverters.iterator();
while (iterator.hasNext()) {
HttpMessageConverter<?> messageConverter = iterator.next();
if (messageConverter instanceof MappingJackson2HttpMessageConverter) {
iterator.remove();
break;
}
}
messageConverters.add(httpMessageConverter);
}
}
用法懒得写,是个人都会,举个例子,下面的是我用restTemplate对接微信公众号的上传图片接口,可以看到传递的参数是图片,还需要设置请求头什么的,这个栗子都给出来了用法。
要注意的是,图片参数要用FileSystemResource来设置,而接口上接收文件的是MulltipartFile类型的参数,所以这里就会生成临时的file文件,等上传完毕再删掉即可
/**
* 上传图片素材
*
* @param accessToken token
* @param multipartFile 图片
* @return {
* "url": "http://mmbiz.qpic.cn/mmbiz/gLO17UPRQ/0"
* }
*/
public JSONObject uploadImage(String accessToken, MultipartFile multipartFile) {
String url = "https://api.weixin.qq.com/cgi-bin/media/uploadimg?access_token=" + accessToken;
//设置请求体,注意是LinkedMultiValueMap
MultiValueMap
String path = GtConfig.getUploadPath() + multipartFile.getOriginalFilename();
File file = new File(path);
try {
multipartFile.transferTo(file);
} catch (IOException e) {
throw new ServiceException(e.getMessage());
}
FileSystemResource media = new FileSystemResource(file);
//设置上传文件
data.add("media", media);
//上传文件,设置请求头
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.setContentType(MediaType.MULTIPART_FORM_DATA);
httpHeaders.setContentLength(multipartFile.getSize());
HttpEntity
//上传
JSONObject jsonObject = restTemplate.postForObject(url, requestEntity, JSONObject.class);
//然后删除临时文件
file.delete();
return jsonObject;
}
然后测试,查看返回
手机扫一扫
移动阅读更方便
你可能感兴趣的文章