Prepare the body of a multipart request, resulting in a MultiValueMap<String, HttpEntity> . Parts may be concrete values or via asynchronous types such as Reactor Mono , Flux , and others registered in the ReactiveAdapterRegistry .
This builder is intended for use with the reactive WebClient . For multipart requests with the RestTemplate , simply create and populate a MultiValueMap<String, HttpEntity> as shown in the Javadoc for FormHttpMessageConverter and in the reference docs.
assume you need to post a pdf file and submit some extra information in json together in a single request, you can create the multi part body like below: webclient.post() .uri(...) .headers(...) .accept(MediaType.APPLICATION_JSON) .bodyValue(createMultiPartBody()) .retrieve().bodyToMono(SendSignedAgreementResponse.class); } private MultiValueMap<String, HttpEntity<?>> createMultiPartRelatedBody() { MultipartBodyBuilder builder = new MultipartBodyBuilder(); builder.part("json", json, MediaType.APPLICATION_JSON); builder.part("pdf", new MultipartFile().getResource(), MediaType.APPLICATION_PDF); return builder.build(); } PS: remember set right content type header, or you might got 415 unsupported media type response error. .header(HttpHeaders.CONTENT_TYPE, MediaType.MULTIPART_MIXED_VALUE) .header(HttpHeaders.CONTENT_TYPE, MediaType.MULTIPART_FORM_VALUE) .header(HttpHeaders.CONTENT_TYPE, MediaType.MULTIPART_RELATED_VALUE)
the above code is equal to below POST raw log use MultiValueMap<String, HttpEntity> for the RestTemplateMultiValueMap<String, HttpEntity<?>> mixParts = new LinkedMultiValueMap<>(); HttpHeaders jsonHeaders = new HttpHeaders(); jsonHeaders.setContentType(MediaType.APPLICATION_JSON); try { mixParts.add("metadata", new HttpEntity<>(objectMapper.writeValueAsString(response), jsonHeaders)); } catch (JsonProcessingException e) { log.error("Oops!", e); } HttpHeaders pdfHeaders = new HttpHeaders(); pdfHeaders.setContentType(MediaType.APPLICATION_PDF); mixParts.add("pdf", new HttpEntity<>(new ClassPathResource("contract_unsigned.pdf"), pdfHeaders)); Response res = restTemplate.exchange(...url, HttpMethod.POST, mixParts, Response.class); References |