public final class MultipartBodyBuilder extends Object
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)
| Modifier and Type | Class and Description |
|---|---|
static interface |
MultipartBodyBuilder.PartBuilder
Builder that allows for further customization of part headers.
|
| Constructor and Description |
|---|
MultipartBodyBuilder()
Creates a new, empty instance of the
MultipartBodyBuilder. |
| Modifier and Type | Method and Description |
|---|---|
<T,P extends Publisher<T>> |
asyncPart(String name,
P publisher,
Class<T> elementClass)
Add a part from
Publisher content. |
<T,P extends Publisher<T>> |
asyncPart(String name,
P publisher,
ParameterizedTypeReference<T> typeReference)
Variant of
asyncPart(String, Publisher, Class) with a
ParameterizedTypeReference for the element type information. |
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 (e.g. |
MultipartBodyBuilder.PartBuilder |
part(String name,
Object part,
MediaType contentType)
Variant of
part(String, Object) that also accepts a MediaType. |
public MultipartBodyBuilder()
MultipartBodyBuilder.public MultipartBodyBuilder.PartBuilder part(String name, Object part)
Resource -- file part
HttpEntity -- part content and headers although generally it's
easier to add headers through the returned builder
Part -- a part from a server request
name - the name of the part to addpart - the part datapublic MultipartBodyBuilder.PartBuilder part(String name, Object part, @Nullable MediaType contentType)
part(String, Object) that also accepts a MediaType.name - the name of the part to addpart - the part datacontentType - the media type to help with encoding the partpublic <T,P extends Publisher<T>> MultipartBodyBuilder.PartBuilder asyncPart(String name, P publisher, Class<T> elementClass)
Publisher content.name - the name of the part to addpublisher - a Publisher of content for the partelementClass - the type of elements contained in the publisherpublic <T,P extends Publisher<T>> MultipartBodyBuilder.PartBuilder asyncPart(String name, P publisher, ParameterizedTypeReference<T> typeReference)
asyncPart(String, Publisher, Class) with a
ParameterizedTypeReference for the element type information.name - the name of the part to addpublisher - the part contentstypeReference - the type of elements contained in the publisherpublic MultiValueMap<String,HttpEntity<?>> build()
MultiValueMap with the configured parts.