RestTemplate中multipart form data传多个参数的处理办法
应用场景
前端请求后端上传单个或多个文件,同时携带其他参数,后端再转发到第三方服务。
思路
- 拿到前端提交的multipart参数
- 读取参数并区分文件/其他参数
- 请求第三方
实现
拿到前端提交的参数并解析到MultiValueMap:
private static MultiValueMap<String, Object> parseMultipart(ServerRequest request) {
MultiValueMap<String, Object> multiValueMap = null;
try {
HttpServletRequest httpServletRequest = request.servletRequest();
Collection<Part> parts = httpServletRequest.getParts();
multiValueMap = new LinkedMultiValueMap<>();
for (Part part : parts) {
String fileName = part.getSubmittedFileName();
// 其他普通参数
if (StringUtils.isBlank(fileName)) {
ContentType parseContentType = ContentType.parse(part.getContentType());
multiValueMap.add(part.getName(), IoUtil.read(part.getInputStream(), parseContentType.getCharset()));
}
// 文件
else {
multiValueMap.add(part.getName(), new InputStreamResource(part.getInputStream()) {
@Override
public long contentLength() {
return part.getSize();
}
@Override
public String getFilename() {
return part.getSubmittedFileName();
}
});
}
}
} catch (IOException | ServletException e) {
throw new RuntimeException(e);
}
return multiValueMap;
}
发起请求:
HttpEntity<Object> httpEntity = new HttpEntity<>(requestDto.getMultipartMap(), requestDto.getHeaders());
String response = restTemplate.exchange(url, httpMethod, httpEntity, String.class);
原文地址:https://blog.csdn.net/Answermaned/article/details/139290779
免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!