restTemplate 使用问题小记

使用restTemplate在后端进行接口转发, 期间包括文件上传, 预览和下载. 还有一些字符串或css/js文件的读取.

1. 文件上传

参考: RestTemplate转发MultipartFile

LinkedMultiValueMap<String, Object> params = new LinkedMultiValueMap<>();
params.add("file", file.getResource());
// headers转发token等参数
// httpMethod 之前的请求方法
return new RequestEntity<>(params, headers, httpMethod, new URI(url));

2. 文件预览和下载

之前是使用Object接收
restTemplate.exchange(requestEntity, Object.class);
在返回文件和text时候会有HttpMessageNotWritableException异常
可参考: 被坑过后才知道学习HttpMessageConverter有多重要被坑過後才知道學習HttpMessageConverter有多重要 中的方式3.
或者使用byte[]接收
restTemplate.exchange(requestEntity, byte[].class);

3. 转发请求后的结果中添加内容(业务需求)

之前使用Object接收的话
Map<String, Object> resultMap = BeanUtil.beanToMap(responseEntity.getBody(), false, false);
如果使用byte[], 需要涉及到字节数组转对象, 其实需要字节转字符串, 再转对象即可
参考: java中字节数组与对象之间的转换
Map<Object, Object> resultMap = JSONUtil.toBean(new String(responseEntity.getBody()), Map.class);

posted @ 2022-11-10 14:16  Codorld  阅读(87)  评论(0编辑  收藏  举报