Package org.springframework.web.server

# Interface ServerWebExchange

All Known Implementing Classes:
  `DefaultServerWebExchange`, `ServerWebExchangeDecorator`

public interface ServerWebExchange
Contract for an HTTP request-response interaction. Provides access to the HTTP request and response and also exposes additional server-side processing related properties and features such as request attributes.

Since:
  5.0
Author:
  Rossen Stoyanchev

## Nested Class Summary

Nested Classes
Modifier and Type
Interface
Description
`static interface`
`ServerWebExchange.Builder`
Builder for mutating an existing `ServerWebExchange`.

## Field Summary

Fields
Modifier and Type
Field
Description
`static final String`
`LOG_ID_ATTRIBUTE`
Name of `attribute` whose value can be used to correlate log messages for this exchange.

## Method Summary

Modifier and Type
Method
Description
`void`
`addUrlTransformer(Function<String,String> transformer)`
Register an additional URL transformation function for use with `transformUrl(java.lang.String)`.
`boolean`
`checkNotModified(String etag)`
An overloaded variant of `checkNotModified(String, Instant)` with an `ETag` (entity tag) value only.
`boolean`
`checkNotModified(String etag, Instant lastModified)`
Check whether the requested resource has been modified given the supplied `ETag` (entity tag) and last-modified timestamp as determined by the application.
`boolean`
`checkNotModified(Instant lastModified)`
An overloaded variant of `checkNotModified(String, Instant)` with a last-modified timestamp only.
`default reactor.core.publisher.Mono<Void>`
`cleanupMultipart()`
Cleans up any storage used for multipart handling.
`org.springframework.context.ApplicationContext`
`getApplicationContext()`
Return the `ApplicationContext` associated with the web application, if it was initialized with one via `WebHttpHandlerBuilder.applicationContext(ApplicationContext)`.
`default <T> T`
`getAttribute(String name)`
Return the request attribute value if present.
`default <T> T`
`getAttributeOrDefault(String name, T defaultValue)`
Return the request attribute value, or a default, fallback value.
`Map<String,Object>`
`getAttributes()`
Return a mutable map of request attributes for the current exchange.
`reactor.core.publisher.Mono<org.springframework.util.MultiValueMap<String,String>>`
`getFormData()`
Return the form data from the body of the request if the Content-Type is `"application/x-www-form-urlencoded"` or an empty map otherwise.
`org.springframework.context.i18n.LocaleContext`
`getLocaleContext()`
Return the `LocaleContext` using the configured `LocaleContextResolver`.
`String`
`getLogPrefix()`
Return a log message prefix to use to correlate messages for this exchange.
`reactor.core.publisher.Mono<org.springframework.util.MultiValueMap<String,Part>>`
`getMultipartData()`
Return the parts of a multipart request if the Content-Type is `"multipart/form-data"` or an empty map otherwise.
`<T extends Principal>
reactor.core.publisher.Mono<T>`
`getPrincipal()`
Return the authenticated user for the request, if any.
`ServerHttpRequest`
`getRequest()`
Return the current HTTP request.
`default <T> T`
`getRequiredAttribute(String name)`
Return the request attribute value or if not present raise an `IllegalArgumentException`.
`ServerHttpResponse`
`getResponse()`
Return the current HTTP response.
`reactor.core.publisher.Mono<WebSession>`
`getSession()`
Return the web session for the current request.
`boolean`
`isNotModified()`
Returns `true` if the one of the `checkNotModified` methods in this contract were used and they returned true.
`default ServerWebExchange.Builder`
`mutate()`
Return a builder to mutate properties of this exchange by wrapping it with `ServerWebExchangeDecorator` and returning either mutated values or delegating back to this instance.
`String`
`transformUrl(String url)`
Transform the given url according to the registered transformation function(s).

## Field Details

### LOG_ID_ATTRIBUTE

static final String LOG_ID_ATTRIBUTE
Name of `attribute` whose value can be used to correlate log messages for this exchange. Use `getLogPrefix()` to obtain a consistently formatted prefix based on this attribute.

Since:
  5.1
See Also:
  - `getLogPrefix()`

## Method Details

### getRequest

ServerHttpRequest getRequest()
Return the current HTTP request.

### getResponse

ServerHttpResponse getResponse()
Return the current HTTP response.

### getAttributes

Map<String,Object> getAttributes()
Return a mutable map of request attributes for the current exchange.

### getAttribute

@Nullable default <T> T getAttribute(String name)
Return the request attribute value if present.

Type Parameters:
  `T` - the attribute type
Parameters:
  `name` - the attribute name
Returns:
  the attribute value

### getRequiredAttribute

default <T> T getRequiredAttribute(String name)
Return the request attribute value or if not present raise an `IllegalArgumentException`.

Type Parameters:
  `T` - the attribute type
Parameters:
  `name` - the attribute name
Returns:
  the attribute value

### getAttributeOrDefault

default <T> T getAttributeOrDefault(String name, T defaultValue)
Return the request attribute value, or a default, fallback value.

Type Parameters:
  `T` - the attribute type
Parameters:
  `name` - the attribute name
  `defaultValue` - a default value to return instead
Returns:
  the attribute value

### getSession

reactor.core.publisher.Mono<WebSession> getSession()
Return the web session for the current request.

Always guaranteed to return either an instance matching the session id requested by the client, or a new session either because the client did not specify a session id or because the underlying session expired.

Use of this method does not automatically create a session. See `WebSession` for more details.

### getPrincipal

<T extends Principal> reactor.core.publisher.Mono<T> getPrincipal()
Return the authenticated user for the request, if any.

### getFormData

reactor.core.publisher.Mono<org.springframework.util.MultiValueMap<String,String>> getFormData()
Return the form data from the body of the request if the Content-Type is `"application/x-www-form-urlencoded"` or an empty map otherwise.

Note: calling this method causes the request body to be read and parsed in full and the resulting `MultiValueMap` is cached so that this method is safe to call more than once.

### getMultipartData

reactor.core.publisher.Mono<org.springframework.util.MultiValueMap<String,Part>> getMultipartData()
Return the parts of a multipart request if the Content-Type is `"multipart/form-data"` or an empty map otherwise.

Note: calling this method causes the request body to be read and parsed in full and the resulting `MultiValueMap` is cached so that this method is safe to call more than once.

Note:the contents of each part is not cached, and can only be read once.

### cleanupMultipart

default reactor.core.publisher.Mono<Void> cleanupMultipart()
Cleans up any storage used for multipart handling.

Since:
  6.0.10
See Also:
  - `Part.delete()`

### getLocaleContext

org.springframework.context.i18n.LocaleContext getLocaleContext()
Return the `LocaleContext` using the configured `LocaleContextResolver`.

### getApplicationContext

@Nullable org.springframework.context.ApplicationContext getApplicationContext()
Return the `ApplicationContext` associated with the web application, if it was initialized with one via `WebHttpHandlerBuilder.applicationContext(ApplicationContext)`.

Since:
  5.0.3
See Also:
  - `WebHttpHandlerBuilder.applicationContext(ApplicationContext)`

### isNotModified

boolean isNotModified()
Returns `true` if the one of the `checkNotModified` methods in this contract were used and they returned true.

### checkNotModified

boolean checkNotModified(Instant lastModified)
An overloaded variant of `checkNotModified(String, Instant)` with a last-modified timestamp only.

Parameters:
  `lastModified` - the last-modified time
Returns:
  whether the request qualifies as not modified

### checkNotModified

boolean checkNotModified(String etag)
An overloaded variant of `checkNotModified(String, Instant)` with an `ETag` (entity tag) value only.

Parameters:
  `etag` - the entity tag for the underlying resource.
Returns:
  true if the request does not require further processing.

### checkNotModified

boolean checkNotModified(@Nullable String etag, Instant lastModified)
Check whether the requested resource has been modified given the supplied `ETag` (entity tag) and last-modified timestamp as determined by the application. Also transparently prepares the response, setting HTTP status, and adding "ETag" and "Last-Modified" headers when applicable. This method works with conditional GET/HEAD requests as well as with conditional POST/PUT/DELETE requests.

Note: The HTTP specification recommends setting both ETag and Last-Modified values, but you can also use `#checkNotModified(String)` or `checkNotModified(Instant)`.

Parameters:
  `etag` - the entity tag that the application determined for the underlying resource. This parameter will be padded with quotes (") if necessary.
  `lastModified` - the last-modified timestamp that the application determined for the underlying resource
Returns:
  true if the request does not require further processing.

### transformUrl

String transformUrl(String url)
Transform the given url according to the registered transformation function(s). By default, this method returns the given `url`, though additional transformation functions can be registered with `addUrlTransformer(java.util.function.Function<java.lang.String, java.lang.String>)`

Parameters:
  `url` - the URL to transform
Returns:
  the transformed URL

### addUrlTransformer

void addUrlTransformer(Function<String,String> transformer)
Register an additional URL transformation function for use with `transformUrl(java.lang.String)`. The given function can be used to insert an id for authentication, a nonce for CSRF protection, etc.

Note that the given function is applied after any previously registered functions.

Parameters:
  `transformer` - a URL transformation function to add

### getLogPrefix

String getLogPrefix()
Return a log message prefix to use to correlate messages for this exchange. The prefix is based on the value of the attribute `LOG_ID_ATTRIBUTE` along with some extra formatting so that the prefix can be conveniently prepended with no further formatting no separators required.

Returns:
  the log message prefix or an empty String if the `LOG_ID_ATTRIBUTE` is not set.
Since:
  5.1

### mutate

default ServerWebExchange.Builder mutate()
Return a builder to mutate properties of this exchange by wrapping it with `ServerWebExchangeDecorator` and returning either mutated values or delegating back to this instance.