Class MultipartBodyBuilder

java.lang.Object
org.springframework.http.client.MultipartBodyBuilder

public final class MultipartBodyBuilder extends Object
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 to POST multipart/form-data using 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.

Below are examples of using this builder:


 // Add form field
 MultipartBodyBuilder builder = new MultipartBodyBuilder();
 builder.part("form field", "form value").header("foo", "bar");

 // Add file part
 Resource image = new ClassPathResource("image.jpg");
 builder.part("image", image).header("foo", "bar");

 // Add content (e.g. JSON)
 Account account = ...
 builder.part("account", account).header("foo", "bar");

 // Add content from Publisher
 Mono<Account> accountMono = ...
 builder.asyncPart("account", accountMono).header("foo", "bar");

 // Build and use
 MultiValueMap<String, HttpEntity<?>> multipartBody = builder.build();

 Mono<Void> result = webClient.post()
     .uri("...")
     .body(multipartBody)
     .retrieve()
     .bodyToMono(Void.class)
 
Since:
5.0.2
Author:
Arjen Poutsma, Rossen Stoyanchev, Sam Brannen
See Also:
  • Constructor Details

    • MultipartBodyBuilder

      public MultipartBodyBuilder()
      Creates a new, empty instance of the MultipartBodyBuilder.
  • Method Details

    • part

      public MultipartBodyBuilder.PartBuilder part(String name, Object part)
      Add a part where the Object may be:
      • String -- form field
      • Resource -- file part
      • Object -- content to be encoded (e.g. to JSON)
      • HttpEntity -- part content and headers although generally it's easier to add headers through the returned builder
      • Part -- a part from a server request
      Parameters:
      name - the name of the part to add
      part - the part data
      Returns:
      builder that allows for further customization of part headers
    • part

      public MultipartBodyBuilder.PartBuilder part(String name, Object part, @Nullable MediaType contentType)
      Variant of part(String, Object) that also accepts a MediaType.
      Parameters:
      name - the name of the part to add
      part - the part data
      contentType - the media type to help with encoding the part
      Returns:
      builder that allows for further customization of part headers
    • asyncPart

      public <T, P extends Publisher<T>> MultipartBodyBuilder.PartBuilder asyncPart(String name, P publisher, Class<T> elementClass)
      Add a part from Publisher content.
      Parameters:
      name - the name of the part to add
      publisher - a Publisher of content for the part
      elementClass - the type of elements contained in the publisher
      Returns:
      builder that allows for further customization of part headers
    • asyncPart

      public <T, P extends Publisher<T>> MultipartBodyBuilder.PartBuilder asyncPart(String name, P publisher, ParameterizedTypeReference<T> typeReference)
      Variant of asyncPart(String, Publisher, Class) with a ParameterizedTypeReference for the element type information.
      Parameters:
      name - the name of the part to add
      publisher - the part contents
      typeReference - the type of elements contained in the publisher
      Returns:
      builder that allows for further customization of part headers
    • build

      public MultiValueMap<String,HttpEntity<?>> build()
      Return a MultiValueMap with the configured parts.