org.springframework.http.server.reactive

## Class AbstractServerHttpResponse

- java.lang.Object
- - org.springframework.http.server.reactive.AbstractServerHttpResponse

- All Implemented Interfaces:
    HttpMessage, ReactiveHttpOutputMessage, ServerHttpResponse
  Direct Known Subclasses:
    AbstractListenerServerHttpResponse, MockServerHttpResponse

      public abstract class AbstractServerHttpResponse
      extends Object
      implements ServerHttpResponse

  Base class for `ServerHttpResponse` implementations.
  Since:
    5.0
  Author:
    Rossen Stoyanchev, Juergen Hoeller, Sebastien Deleuze, Brian Clozel

- - ### Constructor Summary

    Constructors
    Constructor and Description
    `AbstractServerHttpResponse(DataBufferFactory dataBufferFactory)`
    `AbstractServerHttpResponse(DataBufferFactory dataBufferFactory, HttpHeaders headers)`

  - ### Method Summary

    All Methods Instance Methods Abstract Methods Concrete Methods Deprecated Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `addCookie(ResponseCookie cookie)` Add the given `ResponseCookie`.
    `protected abstract void` | `applyCookies()` Add cookies from `getHeaders()` to the underlying response.
    `protected abstract void` | `applyHeaders()` Invoked when the response is getting committed allowing subclasses to make apply header values to the underlying response.
    `protected abstract void` | `applyStatusCode()` Write the status code to the underlying response.
    `void` | `beforeCommit(Supplier<? extends reactor.core.publisher.Mono<Void>> action)` Register an action to apply just before the HttpOutputMessage is committed.
    `DataBufferFactory` | `bufferFactory()` Return a `DataBufferFactory` that can be used to create the body.
    `protected reactor.core.publisher.Mono<Void>` | `doCommit()` A variant of `doCommit(Supplier)` for a response without a body.
    `protected reactor.core.publisher.Mono<Void>` | `doCommit(Supplier<? extends reactor.core.publisher.Mono<Void>> writeAction)` Apply `beforeCommit` actions, apply the response status and headers/cookies, and write the response body.
    `MultiValueMap<String,ResponseCookie>` | `getCookies()` Return a mutable map with the cookies to send to the server.
    `HttpHeaders` | `getHeaders()` Return the headers of this message.
    `abstract <T> T` | `getNativeResponse()` Return the underlying server response.
    `Integer` | `getRawStatusCode()` Return the status code that has been set, or otherwise fall back on the status of the response from the underlying server.
    `HttpStatus` | `getStatusCode()` Return the status code that has been set, or otherwise fall back on the status of the response from the underlying server.
    `Integer` | `getStatusCodeValue()` Deprecated. as of 5.2.4 in favor of `ServerHttpResponse.getRawStatusCode()`.
    `boolean` | `isCommitted()` Whether the HttpOutputMessage is committed.
    `reactor.core.publisher.Mono<Void>` | `setComplete()` Indicate that message handling is complete, allowing for any cleanup or end-of-processing tasks to be performed such as applying header changes made via `HttpMessage.getHeaders()` to the underlying HTTP message (if not applied already).
    `boolean` | `setRawStatusCode(Integer statusCode)` Set the HTTP status code to the given value (potentially non-standard and not resolvable through the `HttpStatus` enum) as an integer.
    `boolean` | `setStatusCode(HttpStatus status)` Set the HTTP status code of the response.
    `void` | `setStatusCodeValue(Integer statusCode)` Deprecated. as of 5.2.4 in favor of `ServerHttpResponse.setRawStatusCode(Integer)`.
    `protected void` | `touchDataBuffer(DataBuffer buffer)` Allow subclasses to associate a hint with the data buffer if it is a pooled buffer and supports leak tracking.
    `reactor.core.publisher.Mono<Void>` | `writeAndFlushWith(Publisher<? extends Publisher<? extends DataBuffer>> body)` Use the given `Publisher` of `Publishers` to write the body of the HttpOutputMessage to the underlying HTTP layer, flushing after each `Publisher<DataBuffer>`.
    `protected abstract reactor.core.publisher.Mono<Void>` | `writeAndFlushWithInternal(Publisher<? extends Publisher<? extends DataBuffer>> body)` Write to the underlying the response, and flush after each `Publisher<DataBuffer>`.
    `reactor.core.publisher.Mono<Void>` | `writeWith(Publisher<? extends DataBuffer> body)` Use the given `Publisher` to write the body of the message to the underlying HTTP layer.
    `protected abstract reactor.core.publisher.Mono<Void>` | `writeWithInternal(Publisher<? extends DataBuffer> body)` Write to the underlying the response.

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

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

- - ### Constructor Detail

    - #### AbstractServerHttpResponse

          public AbstractServerHttpResponse(DataBufferFactory dataBufferFactory)

    - #### AbstractServerHttpResponse

          public AbstractServerHttpResponse(DataBufferFactory dataBufferFactory,
                                            HttpHeaders headers)

  - ### Method Detail

    - #### bufferFactory

          public final DataBufferFactory bufferFactory()

      Description copied from interface: `ReactiveHttpOutputMessage`
      Return a `DataBufferFactory` that can be used to create the body.
      Specified by:
        `bufferFactory` in interface `ReactiveHttpOutputMessage`
      Returns:
        a buffer factory
      See Also:
        `ReactiveHttpOutputMessage.writeWith(Publisher)`

    - #### setStatusCode

          public boolean setStatusCode(@Nullable
                                       HttpStatus status)

      Description copied from interface: `ServerHttpResponse`
      Set the HTTP status code of the response.
      Specified by:
        `setStatusCode` in interface `ServerHttpResponse`
      Parameters:
        `status` - the HTTP status as an `HttpStatus` enum value
      Returns:
        `false` if the status code change wasn't processed because the HTTP response is committed, `true` if successfully set.

    - #### getStatusCode

          @Nullable
          public HttpStatus getStatusCode()

      Description copied from interface: `ServerHttpResponse`
      Return the status code that has been set, or otherwise fall back on the status of the response from the underlying server. The return value may be `null` if the status code value is outside the `HttpStatus` enum range, or if there is no default value from the underlying server.
      Specified by:
        `getStatusCode` in interface `ServerHttpResponse`

    - #### setRawStatusCode

          public boolean setRawStatusCode(@Nullable
                                          Integer statusCode)

      Description copied from interface: `ServerHttpResponse`
      Set the HTTP status code to the given value (potentially non-standard and not resolvable through the `HttpStatus` enum) as an integer.
      Specified by:
        `setRawStatusCode` in interface `ServerHttpResponse`
      Parameters:
        `statusCode` - the status code value
      Returns:
        `false` if the status code change wasn't processed because the HTTP response is committed, `true` if successfully set.

    - #### getRawStatusCode

          @Nullable
          public Integer getRawStatusCode()

      Description copied from interface: `ServerHttpResponse`
      Return the status code that has been set, or otherwise fall back on the status of the response from the underlying server. The return value may be `null` if there is no default value from the underlying server.
      Specified by:
        `getRawStatusCode` in interface `ServerHttpResponse`

    - #### setStatusCodeValue

          @Deprecated
          public void setStatusCodeValue(@Nullable
                                                     Integer statusCode)

      Deprecated. as of 5.2.4 in favor of `ServerHttpResponse.setRawStatusCode(Integer)`.
      Set the HTTP status code of the response.
      Parameters:
        `statusCode` - the HTTP status as an integer value
      Since:
        5.0.1

    - #### getStatusCodeValue

          @Nullable
           @Deprecated
          public Integer getStatusCodeValue()

      Deprecated. as of 5.2.4 in favor of `ServerHttpResponse.getRawStatusCode()`.
      Return the HTTP status code of the response.
      Returns:
        the HTTP status as an integer value
      Since:
        5.0.1

    - #### getHeaders

          public HttpHeaders getHeaders()

      Description copied from interface: `HttpMessage`
      Return the headers of this message.
      Specified by:
        `getHeaders` in interface `HttpMessage`
      Returns:
        a corresponding HttpHeaders object (never `null`)

    - #### getCookies

          public MultiValueMap<String,ResponseCookie> getCookies()

      Description copied from interface: `ServerHttpResponse`
      Return a mutable map with the cookies to send to the server.
      Specified by:
        `getCookies` in interface `ServerHttpResponse`

    - #### addCookie

          public void addCookie(ResponseCookie cookie)

      Description copied from interface: `ServerHttpResponse`
      Add the given `ResponseCookie`.
      Specified by:
        `addCookie` in interface `ServerHttpResponse`
      Parameters:
        `cookie` - the cookie to add

    - #### getNativeResponse

          public abstract <T> T getNativeResponse()

      Return the underlying server response.

      Note: This is exposed mainly for internal framework use such as WebSocket upgrades in the spring-webflux module.

    - #### beforeCommit

          public void beforeCommit(Supplier<? extends reactor.core.publisher.Mono<Void>> action)

      Description copied from interface: `ReactiveHttpOutputMessage`
      Register an action to apply just before the HttpOutputMessage is committed.

      Note: the supplied action must be properly deferred, e.g. via `Mono.defer(java.util.function.Supplier<? extends reactor.core.publisher.Mono<? extends T>>)` or `Mono.fromRunnable(java.lang.Runnable)`, to ensure it's executed in the right order, relative to other actions.

      Specified by:
        `beforeCommit` in interface `ReactiveHttpOutputMessage`
      Parameters:
        `action` - the action to apply

    - #### isCommitted

          public boolean isCommitted()

      Description copied from interface: `ReactiveHttpOutputMessage`
      Whether the HttpOutputMessage is committed.
      Specified by:
        `isCommitted` in interface `ReactiveHttpOutputMessage`

    - #### writeWith

          public final reactor.core.publisher.Mono<Void> writeWith(Publisher<? extends DataBuffer> body)

      Description copied from interface: `ReactiveHttpOutputMessage`
      Use the given `Publisher` to write the body of the message to the underlying HTTP layer.
      Specified by:
        `writeWith` in interface `ReactiveHttpOutputMessage`
      Parameters:
        `body` - the body content publisher
      Returns:
        a `Mono` that indicates completion or error

    - #### writeAndFlushWith

          public final reactor.core.publisher.Mono<Void> writeAndFlushWith(Publisher<? extends Publisher<? extends DataBuffer>> body)

      Description copied from interface: `ReactiveHttpOutputMessage`
      Use the given `Publisher` of `Publishers` to write the body of the HttpOutputMessage to the underlying HTTP layer, flushing after each `Publisher<DataBuffer>`.
      Specified by:
        `writeAndFlushWith` in interface `ReactiveHttpOutputMessage`
      Parameters:
        `body` - the body content publisher
      Returns:
        a `Mono` that indicates completion or error

    - #### setComplete

          public reactor.core.publisher.Mono<Void> setComplete()

      Description copied from interface: `ReactiveHttpOutputMessage`
      Indicate that message handling is complete, allowing for any cleanup or end-of-processing tasks to be performed such as applying header changes made via `HttpMessage.getHeaders()` to the underlying HTTP message (if not applied already).

      This method should be automatically invoked at the end of message processing so typically applications should not have to invoke it. If invoked multiple times it should have no side effects.

      Specified by:
        `setComplete` in interface `ReactiveHttpOutputMessage`
      Returns:
        a `Mono` that indicates completion or error

    - #### doCommit

          protected reactor.core.publisher.Mono<Void> doCommit()

      A variant of `doCommit(Supplier)` for a response without a body.
      Returns:
        a completion publisher

    - #### doCommit

          protected reactor.core.publisher.Mono<Void> doCommit(@Nullable
                                                               Supplier<? extends reactor.core.publisher.Mono<Void>> writeAction)

      Apply `beforeCommit` actions, apply the response status and headers/cookies, and write the response body.
      Parameters:
        `writeAction` - the action to write the response body (may be `null`)
      Returns:
        a completion publisher

    - #### writeWithInternal

          protected abstract reactor.core.publisher.Mono<Void> writeWithInternal(Publisher<? extends DataBuffer> body)

      Write to the underlying the response.
      Parameters:
        `body` - the publisher to write with

    - #### writeAndFlushWithInternal

          protected abstract reactor.core.publisher.Mono<Void> writeAndFlushWithInternal(Publisher<? extends Publisher<? extends DataBuffer>> body)

      Write to the underlying the response, and flush after each `Publisher<DataBuffer>`.
      Parameters:
        `body` - the publisher to write and flush with

    - #### applyStatusCode

          protected abstract void applyStatusCode()

      Write the status code to the underlying response. This method is called once only.

    - #### applyHeaders

          protected abstract void applyHeaders()

      Invoked when the response is getting committed allowing subclasses to make apply header values to the underlying response.

      Note that most subclasses use an `HttpHeaders` instance that wraps an adapter to the native response headers such that changes are propagated to the underlying response on the go. That means this callback is typically not used other than for specialized updates such as setting the contentType or characterEncoding fields in a Servlet response.

    - #### applyCookies

          protected abstract void applyCookies()

      Add cookies from `getHeaders()` to the underlying response. This method is called once only.

    - #### touchDataBuffer

          protected void touchDataBuffer(DataBuffer buffer)

      Allow subclasses to associate a hint with the data buffer if it is a pooled buffer and supports leak tracking.
      Parameters:
        `buffer` - the buffer to attach a hint to
      Since:
        5.3.2