Package org.springframework.http.client

# 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 (for example, 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("...")
         .bodyValue(multipartBody)
         .retrieve()
         .bodyToMono(Void.class)

Since:
  5.0.2
Author:
  Arjen Poutsma, Rossen Stoyanchev, Sam Brannen
See Also:
  - RFC 7578

## Nested Class Summary

Nested Classes
Modifier and Type
Class
Description
`static interface`
`MultipartBodyBuilder.PartBuilder`
Builder that allows for further customization of part headers.

## Constructor Summary

Constructors
Constructor
Description
`MultipartBodyBuilder()`
Creates a new, empty instance of the `MultipartBodyBuilder`.

## Method Summary

Modifier and Type
Method
Description
`<T, P extends Publisher<T>>
MultipartBodyBuilder.PartBuilder`
`asyncPart(String name, P publisher, Class<T> elementClass)`
Add a part from `Publisher` content.
`<T, P extends Publisher<T>>
MultipartBodyBuilder.PartBuilder`
`asyncPart(String name, P publisher, org.springframework.core.ParameterizedTypeReference<T> typeReference)`
Variant of `asyncPart(String, Publisher, Class)` with a `ParameterizedTypeReference` for the element type information.
`org.springframework.util.MultiValueMap<String,HttpEntity<?>>`
`build()`
Return a `MultiValueMap` with the configured parts.
`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 (for example, to JSON).
`MultipartBodyBuilder.PartBuilder`
`part(String name, Object part, MediaType contentType)`
Variant of `part(String, Object)` that also accepts a MediaType.

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

## 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 (for example, 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, org.springframework.core.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 org.springframework.util.MultiValueMap<String,HttpEntity<?>> build()
Return a `MultiValueMap` with the configured parts.