Interface WebClient.RequestHeadersSpec<S extends WebClient.RequestHeadersSpec<S>>
- Type Parameters:
S
- a self reference to the spec type
- All Known Subinterfaces:
WebClient.RequestBodySpec
,WebClient.RequestBodyUriSpec
,WebClient.RequestHeadersUriSpec<S>
- Enclosing interface:
- WebClient
-
Method Summary
Modifier and TypeMethodDescriptionSet the list of acceptable media types, as specified by theAccept
header.acceptCharset
(Charset... acceptableCharsets) Set the list of acceptable charsets, as specified by theAccept-Charset
header.Set the attribute with the given name to the given value.attributes
(Consumer<Map<String, Object>> attributesConsumer) Provides access to every attribute declared so far with the possibility to add, replace, or remove values.Deprecated.in 5.3.2 to be removed soon after; this method cannot provide context to downstream (nested or subsequent) requests and is of limited value.Add a cookie with the given name and value.cookies
(Consumer<MultiValueMap<String, String>> cookiesConsumer) Provides access to every cookie declared so far with the possibility to add, replace, or remove values.reactor.core.publisher.Mono<ClientResponse>
exchange()
Deprecated.since 5.3 due to the possibility to leak memory and/or connections; please, useexchangeToMono(Function)
,exchangeToFlux(Function)
; consider also usingretrieve()
which provides access to the response status and headers viaResponseEntity
along with error status handling.<V> reactor.core.publisher.Flux<V>
exchangeToFlux
(Function<ClientResponse, ? extends reactor.core.publisher.Flux<V>> responseHandler) An alternative toretrieve()
that provides more control via access to theClientResponse
.<V> reactor.core.publisher.Mono<V>
exchangeToMono
(Function<ClientResponse, ? extends reactor.core.publisher.Mono<V>> responseHandler) An alternative toretrieve()
that provides more control via access to theClientResponse
.Add the given, single header value under the given name.headers
(Consumer<HttpHeaders> headersConsumer) Provides access to every header declared so far with the possibility to add, replace, or remove values.httpRequest
(Consumer<ClientHttpRequest> requestConsumer) Callback for access to theClientHttpRequest
that in turn provides access to the native request of the underlying HTTP library.ifModifiedSince
(ZonedDateTime ifModifiedSince) Set the value of theIf-Modified-Since
header.ifNoneMatch
(String... ifNoneMatches) Set the values of theIf-None-Match
header.retrieve()
Proceed to declare how to extract the response.
-
Method Details
-
accept
Set the list of acceptable media types, as specified by theAccept
header.- Parameters:
acceptableMediaTypes
- the acceptable media types- Returns:
- this builder
-
acceptCharset
Set the list of acceptable charsets, as specified by theAccept-Charset
header.- Parameters:
acceptableCharsets
- the acceptable charsets- Returns:
- this builder
-
cookie
Add a cookie with the given name and value.- Parameters:
name
- the cookie namevalue
- the cookie value- Returns:
- this builder
-
cookies
Provides access to every cookie declared so far with the possibility to add, replace, or remove values.- Parameters:
cookiesConsumer
- the consumer to provide access to- Returns:
- this builder
-
ifModifiedSince
Set the value of theIf-Modified-Since
header.The date should be specified as the number of milliseconds since January 1, 1970 GMT.
- Parameters:
ifModifiedSince
- the new value of the header- Returns:
- this builder
-
ifNoneMatch
Set the values of theIf-None-Match
header.- Parameters:
ifNoneMatches
- the new value of the header- Returns:
- this builder
-
header
Add the given, single header value under the given name.- Parameters:
headerName
- the header nameheaderValues
- the header value(s)- Returns:
- this builder
-
headers
Provides access to every header declared so far with the possibility to add, replace, or remove values.- Parameters:
headersConsumer
- the consumer to provide access to- Returns:
- this builder
-
attribute
Set the attribute with the given name to the given value.- Parameters:
name
- the name of the attribute to addvalue
- the value of the attribute to add- Returns:
- this builder
-
attributes
Provides access to every attribute declared so far with the possibility to add, replace, or remove values.- Parameters:
attributesConsumer
- the consumer to provide access to- Returns:
- this builder
-
context
@Deprecated S context(Function<reactor.util.context.Context, reactor.util.context.Context> contextModifier) Deprecated.in 5.3.2 to be removed soon after; this method cannot provide context to downstream (nested or subsequent) requests and is of limited value.Provide a function to populate the ReactorContext
.- Parameters:
contextModifier
- the function to modify the context with- Since:
- 5.3.1
-
httpRequest
Callback for access to theClientHttpRequest
that in turn provides access to the native request of the underlying HTTP library. This could be useful for setting advanced, per-request options that exposed by the underlying library.- Parameters:
requestConsumer
- a consumer to access theClientHttpRequest
with- Returns:
ResponseSpec
to specify how to decode the body- Since:
- 5.3
-
retrieve
WebClient.ResponseSpec retrieve()Proceed to declare how to extract the response. For example to extract aResponseEntity
with status, headers, and body:Mono<ResponseEntity<Person>> entityMono = client.get() .uri("/persons/1") .accept(MediaType.APPLICATION_JSON) .retrieve() .toEntity(Person.class);
Or if interested only in the body:
Mono<Person> entityMono = client.get() .uri("/persons/1") .accept(MediaType.APPLICATION_JSON) .retrieve() .bodyToMono(Person.class);
By default, 4xx and 5xx responses result in a
WebClientResponseException
. To customize error handling, useonStatus
handlers. -
exchangeToMono
<V> reactor.core.publisher.Mono<V> exchangeToMono(Function<ClientResponse, ? extends reactor.core.publisher.Mono<V>> responseHandler) An alternative toretrieve()
that provides more control via access to theClientResponse
. This can be useful for advanced scenarios, for example to decode the response differently depending on the response status:Mono<Person> entityMono = client.get() .uri("/persons/1") .accept(MediaType.APPLICATION_JSON) .exchangeToMono(response -> { if (response.statusCode().equals(HttpStatus.OK)) { return response.bodyToMono(Person.class); } else { return response.createError(); } });
Note: After the returned
Mono
completes, the response body is automatically released if it hasn't been consumed. If the response content is needed, the provided function must declare how to decode it.- Type Parameters:
V
- the type of Object the response will be transformed to- Parameters:
responseHandler
- the function to handle the response with- Returns:
- a
Mono
produced from the response - Since:
- 5.3
-
exchangeToFlux
<V> reactor.core.publisher.Flux<V> exchangeToFlux(Function<ClientResponse, ? extends reactor.core.publisher.Flux<V>> responseHandler) An alternative toretrieve()
that provides more control via access to theClientResponse
. This can be useful for advanced scenarios, for example to decode the response differently depending on the response status:Flux<Person> entityMono = client.get() .uri("/persons") .accept(MediaType.APPLICATION_JSON) .exchangeToFlux(response -> { if (response.statusCode().equals(HttpStatus.OK)) { return response.bodyToFlux(Person.class); } else { return response.createError().flux(); } });
Note: After the returned
Flux
completes, the response body is automatically released if it hasn't been consumed. If the response content is needed, the provided function must declare how to decode it.- Type Parameters:
V
- the type of Objects the response will be transformed to- Parameters:
responseHandler
- the function to handle the response with- Returns:
- a
Flux
of Objects produced from the response - Since:
- 5.3
-
exchange
Deprecated.since 5.3 due to the possibility to leak memory and/or connections; please, useexchangeToMono(Function)
,exchangeToFlux(Function)
; consider also usingretrieve()
which provides access to the response status and headers viaResponseEntity
along with error status handling.Perform the HTTP request and return aClientResponse
with the response status and headers. You can then use methods of the response to consume the body:Mono<Person> mono = client.get() .uri("/persons/1") .accept(MediaType.APPLICATION_JSON) .exchange() .flatMap(response -> response.bodyToMono(Person.class)); Flux<Person> flux = client.get() .uri("/persons") .accept(MediaType.APPLICATION_STREAM_JSON) .exchange() .flatMapMany(response -> response.bodyToFlux(Person.class));
NOTE: Unlike
retrieve()
, when usingexchange()
, it is the responsibility of the application to consume any response content regardless of the scenario (success, error, unexpected data, etc). Not doing so can cause a memory leak. SeeClientResponse
for a list of all the available options for consuming the body. Generally prefer usingretrieve()
unless you have a good reason to useexchange()
which does allow to check the response status and headers before deciding how or if to consume the response.- Returns:
- a
Mono
for the response - See Also:
-