org.springframework.web.server.adapter

## Class DefaultServerWebExchange

- java.lang.Object
- - org.springframework.web.server.adapter.DefaultServerWebExchange

- All Implemented Interfaces:
    ServerWebExchange
  Direct Known Subclasses:
    MockServerWebExchange

      public class DefaultServerWebExchange
      extends Object
      implements ServerWebExchange

  Default implementation of `ServerWebExchange`.
  Since:
    5.0
  Author:
    Rossen Stoyanchev, Brian Clozel

- - ### Nested Class Summary

    - ### Nested classes/interfaces inherited from interface org.springframework.web.server.ServerWebExchange

      `ServerWebExchange.Builder`

  - ### Field Summary

    - ### Fields inherited from interface org.springframework.web.server.ServerWebExchange

      `LOG_ID_ATTRIBUTE`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `DefaultServerWebExchange(ServerHttpRequest request, ServerHttpResponse response, WebSessionManager sessionManager, ServerCodecConfigurer codecConfigurer, LocaleContextResolver localeContextResolver)`

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `addUrlTransformer(Function<String,String> transformer)` Register an additional URL transformation function for use with `ServerWebExchange.transformUrl(java.lang.String)`.
    `boolean` | `checkNotModified(Instant lastModified)` An overloaded variant of `ServerWebExchange.checkNotModified(String, Instant)` with a last-modified timestamp only.
    `boolean` | `checkNotModified(String etag)` An overloaded variant of `ServerWebExchange.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.
    `ApplicationContext` | `getApplicationContext()` Return the `ApplicationContext` associated with the web application, if it was initialized with one via `WebHttpHandlerBuilder.applicationContext(ApplicationContext)`.
    `Map<String,Object>` | `getAttributes()` Return a mutable map of request attributes for the current exchange.
    `reactor.core.publisher.Mono<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.
    `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<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.
    `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.
    `String` | `transformUrl(String url)` Transform the given url according to the registered transformation function(s).

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

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

    - ### Methods inherited from interface org.springframework.web.server.ServerWebExchange

      `getAttribute, getAttributeOrDefault, getRequiredAttribute, mutate`

- - ### Constructor Detail

    - #### DefaultServerWebExchange

          public DefaultServerWebExchange(ServerHttpRequest request,
                                          ServerHttpResponse response,
                                          WebSessionManager sessionManager,
                                          ServerCodecConfigurer codecConfigurer,
                                          LocaleContextResolver localeContextResolver)

  - ### Method Detail

    - #### getRequest

          public ServerHttpRequest getRequest()

      Description copied from interface: `ServerWebExchange`
      Return the current HTTP request.
      Specified by:
        `getRequest` in interface `ServerWebExchange`

    - #### getResponse

          public ServerHttpResponse getResponse()

      Description copied from interface: `ServerWebExchange`
      Return the current HTTP response.
      Specified by:
        `getResponse` in interface `ServerWebExchange`

    - #### getAttributes

          public Map<String,Object> getAttributes()

      Description copied from interface: `ServerWebExchange`
      Return a mutable map of request attributes for the current exchange.
      Specified by:
        `getAttributes` in interface `ServerWebExchange`

    - #### getSession

          public reactor.core.publisher.Mono<WebSession> getSession()

      Description copied from interface: `ServerWebExchange`
      Return the web session for the current request. Always guaranteed to return an instance either matching to the session id requested by the client, or with a new session id either because the client did not specify one or because the underlying session had expired. Use of this method does not automatically create a session. See `WebSession` for more details.
      Specified by:
        `getSession` in interface `ServerWebExchange`

    - #### getPrincipal

          public <T extends Principal> reactor.core.publisher.Mono<T> getPrincipal()

      Description copied from interface: `ServerWebExchange`
      Return the authenticated user for the request, if any.
      Specified by:
        `getPrincipal` in interface `ServerWebExchange`

    - #### getFormData

          public reactor.core.publisher.Mono<MultiValueMap<String,String>> getFormData()

      Description copied from interface: `ServerWebExchange`
      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.

      Specified by:
        `getFormData` in interface `ServerWebExchange`

    - #### getMultipartData

          public reactor.core.publisher.Mono<MultiValueMap<String,Part>> getMultipartData()

      Description copied from interface: `ServerWebExchange`
      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.

      Specified by:
        `getMultipartData` in interface `ServerWebExchange`

    - #### getLocaleContext

          public LocaleContext getLocaleContext()

      Description copied from interface: `ServerWebExchange`
      Return the `LocaleContext` using the configured `LocaleContextResolver`.
      Specified by:
        `getLocaleContext` in interface `ServerWebExchange`

    - #### getApplicationContext

          @Nullable
          public ApplicationContext getApplicationContext()

      Description copied from interface: `ServerWebExchange`
      Return the `ApplicationContext` associated with the web application, if it was initialized with one via `WebHttpHandlerBuilder.applicationContext(ApplicationContext)`.
      Specified by:
        `getApplicationContext` in interface `ServerWebExchange`
      See Also:
        `WebHttpHandlerBuilder.applicationContext(ApplicationContext)`

    - #### isNotModified

          public boolean isNotModified()

      Description copied from interface: `ServerWebExchange`
      Returns `true` if the one of the `checkNotModified` methods in this contract were used and they returned true.
      Specified by:
        `isNotModified` in interface `ServerWebExchange`

    - #### checkNotModified

          public boolean checkNotModified(Instant lastModified)

      Description copied from interface: `ServerWebExchange`
      An overloaded variant of `ServerWebExchange.checkNotModified(String, Instant)` with a last-modified timestamp only.
      Specified by:
        `checkNotModified` in interface `ServerWebExchange`
      Parameters:
        `lastModified` - the last-modified time
      Returns:
        whether the request qualifies as not modified

    - #### checkNotModified

          public boolean checkNotModified(String etag)

      Description copied from interface: `ServerWebExchange`
      An overloaded variant of `ServerWebExchange.checkNotModified(String, Instant)` with an `ETag` (entity tag) value only.
      Specified by:
        `checkNotModified` in interface `ServerWebExchange`
      Parameters:
        `etag` - the entity tag for the underlying resource.
      Returns:
        true if the request does not require further processing.

    - #### checkNotModified

          public boolean checkNotModified(@Nullable
                                          String etag,
                                          Instant lastModified)

      Description copied from interface: `ServerWebExchange`
      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 `ServerWebExchange.checkNotModified(Instant)`.

      Specified by:
        `checkNotModified` in interface `ServerWebExchange`
      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

          public String transformUrl(String url)

      Description copied from interface: `ServerWebExchange`
      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 `ServerWebExchange.addUrlTransformer(java.util.function.Function<java.lang.String, java.lang.String>)`
      Specified by:
        `transformUrl` in interface `ServerWebExchange`
      Parameters:
        `url` - the URL to transform
      Returns:
        the transformed URL

    - #### addUrlTransformer

          public void addUrlTransformer(Function<String,String> transformer)

      Description copied from interface: `ServerWebExchange`
      Register an additional URL transformation function for use with `ServerWebExchange.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.

      Specified by:
        `addUrlTransformer` in interface `ServerWebExchange`
      Parameters:
        `transformer` - a URL transformation function to add

    - #### getLogPrefix

          public String getLogPrefix()

      Description copied from interface: `ServerWebExchange`
      Return a log message prefix to use to correlate messages for this exchange. The prefix is based on the value of the attribute `ServerWebExchange.LOG_ID_ATTRIBUTE` along with some extra formatting so that the prefix can be conveniently prepended with no further formatting no separators required.
      Specified by:
        `getLogPrefix` in interface `ServerWebExchange`
      Returns:
        the log message prefix or an empty String if the `ServerWebExchange.LOG_ID_ATTRIBUTE` is not set.