[英]SPRING BOOT: RestTemplate postForObject 400 bad request
[英]MultipartFile failed in RestTemplate with - Bad Request 400 No body
以下是方法细节:
我将多部分文件 object 传递给另一个 rest api 服务。 这是代码。(HTTP方法是POST,url是“/uploadDocument”)
public ResponseEntity<String> executeMultipartRequest(String url, HttpMethod method, MultipartFile obj){
HttpHeaders requestHeaders = new HttpHeaders();
requestHeaders.setContentType(MediaType.MULTIPART_FORM_DATA);
requestHeaders.add("Accept", MediaType.APPLICATION_JSON_VALUE);
MultiValueMap<String, Object> body = new LinkedMultiValueMap<>();
body.add("file", obj.getResource());
HttpEntity<?> requestEntity = new HttpEntity<>(body, requestHeaders);
return restTemplate.exchange(url, method, requestEntity, String.class);
}
这是我从上述方法调用中调用的服务:
@PostMapping(value = "/uploadDocument", consumes = MediaType.MULTIPART_FORM_DATA_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<String> uploadFile(@RequestParam("file") MultipartFile file, @RequestParam("userName") String userName) {
return null; // removed actual code.
}
但是当我执行该方法时,出现以下错误:
org.apache.catalina.core.StandardWrapperValve 调用严重:Servlet.service() for servlet [dispatcher] in context with path [/attest] throw exception [Request processing failed; 嵌套异常是 org.springframework.web.client.HttpClientErrorException$BadRequest: 400: [no body]] 根本原因 org.springframework.web.client.HttpClientErrorException$BadRequest: 400: [no body]
知道问题到底是什么吗?
我也想知道,方法正确吗?
需要什么改变吗?
有什么建议么?
谢谢,
阿图尔
我可以通过 rest api 发送 MultipartFile object。
这些是我对问题中提到的现有代码所做的更改。
这是工作代码:
public ResponseEntity<String> executeMultipartRequest(String url, HttpMethod method, Object obj, Map<String, String> dataMap){
HttpHeaders requestHeaders = new HttpHeaders();
requestHeaders.setContentType(MediaType.MULTIPART_FORM_DATA);
requestHeaders.setCacheControl(CacheControl.noCache());
MultiValueMap<String, Object> body = new LinkedMultiValueMap<>();
ContentDisposition contentDisposition = ContentDisposition.builder("form-data")
.name("file")
.filename(((MultipartFile)obj).getOriginalFilename())
.build();
body.add(HttpHeaders.CONTENT_DISPOSITION, contentDisposition.toString());
body.add("file", ((MultipartFile)obj).getResource());
body.add("Content-Type", ((MultipartFile)obj).getContentType());
addData(body, dataMap);
HttpEntity<?> requestEntity = new HttpEntity<>(body, requestHeaders);
logger.debug("executeMultipartRequest => before executing rest api request.");
return restTemplate.exchange(url, method, requestEntity, String.class);
}
private void addData(MultiValueMap<String, Object> body, Map<String, String> dataMap) {
if(!dataMap.isEmpty()){
dataMap.forEach((key, value) -> body.add(key, value));
}
}
我应用的解决方案是通过将文件添加到 ContentDisposition 中来将文件作为表单数据发送。
设置所需的属性。
端点 url 与问题中提到的相同。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.