Я пытаюсь отправить файл из одного приложения 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()));
}
Код в приложении, выполняющем запрос POST к конечной точке thios, выглядит как
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>>() {
});
}
Если я отправлю файл в форме, используя почтальон - это работает
Заголовок типа контента по запросу от Почтальона выглядит как
content-type:"multipart/form-data; boundary=--------------------------286899320410555838190774"
Когда POST выполняется RestTemplate, я получаю следующую ошибку.
com.fasterxml.jackson.databind.exc.MismatchedInputException: нет содержимого для отображения из-за конца ввода в [Source: (String) ""; строка: 1, столбец: 0]
Я подозреваю, что заголовок типа содержимого, отправляемый в запросе, неверен.
Кто-нибудь знает, как правильно установить заголовок типа содержимого для MULTIPART_FORM_DATA?