Class 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 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.

    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
    See Also:
    RFC 7578
    • Constructor Detail

      • MultipartBodyBuilder

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

      • 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
      • asyncPart

        public <T,​P extends org.reactivestreams.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