【发布时间】:2019-08-03 22:22:32
【问题描述】:
我正在尝试将文件从一个 SpringBoot 应用程序发布到另一个 SpringBoot 应用程序。 我试图到达的终点看起来像
@PostMapping(
value = "/upload",
consumes = MULTIPART_FORM_DATA_VALUE)
public ResponseEntity<ArmResponse<JobData>> uploadInvoices(@RequestParam("file") MultipartFile interestingStuff) {
String incomingFilename = interestingStuff.getName();
String originalFilename = interestingStuff.getOriginalFilename();
String contentType = interestingStuff.getContentType();
// do interesting stuff here
return ok(successfulResponse(new JobData()));
}
应用程序中对 thios 端点执行 POST 请求的代码如下所示
public void loadInvoices(MultipartFile invoices) throws IOException {
File invoicesFile = new File(invoices.getOriginalFilename());
invoices.transferTo(invoicesFile);
LinkedMultiValueMap<String, Object> parts = new LinkedMultiValueMap<>();
parts.add("file", invoicesFile);
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.setContentType(MediaType.MULTIPART_FORM_DATA);
HttpEntity<LinkedMultiValueMap<String, Object>> httpEntity = new HttpEntity<>(parts, httpHeaders);
String url = String.format("%s/rest/inbound/invoices/upload", baseUrl);
final List<HttpMessageConverter<?>> messageConverters = new ArrayList<>();
messageConverters.add(new ByteArrayHttpMessageConverter());
messageConverters.add(new ResourceHttpMessageConverter());
messageConverters.add(new AllEncompassingFormHttpMessageConverter());
messageConverters.add(new FormHttpMessageConverter());
messageConverters.add(new SourceHttpMessageConverter<Source>());
RestTemplate template = new RestTemplate(messageConverters);
template.exchange(
url,
HttpMethod.POST,
httpEntity,
new ParameterizedTypeReference<ArmResponse<JobData>>() {
});
}
如果我使用邮递员以表格形式发布文件 - 它可以工作 Postman 请求中的内容类型标头看起来像
content-type:"multipart/form-data; boundary=--------------------------286899320410555838190774"
当 RestTemplate 执行 POST 时,出现以下错误。
com.fasterxml.jackson.databind.exc.MismatchedInputException: 由于 [Source: (String)"" 的输入结束,没有要映射的内容;行:1,列:0]
我怀疑请求中发送的内容类型标头是错误的。 有谁知道如何正确设置 MULTIPART_FORM_DATA 的内容类型标头?
【问题讨论】:
标签: spring spring-boot multipartform-data resttemplate