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 Details

  • Method Details

    • 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:
    • 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
    • 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 no 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 sub-classes to make apply header values to the underlying response.

      Note that most sub-classes 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 sub-classes 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