Class MockServerHttpResponse

All Implemented Interfaces:
HttpMessage, ReactiveHttpOutputMessage, ServerHttpResponse

public class MockServerHttpResponse extends AbstractServerHttpResponse
Mock extension of AbstractServerHttpResponse for use in tests without an actual server.

By default response content is consumed in full upon writing and cached for subsequent access, however it is also possible to set a custom writeHandler.

Rossen Stoyanchev
  • Constructor Details

    • MockServerHttpResponse

      public MockServerHttpResponse()
    • MockServerHttpResponse

      public MockServerHttpResponse(DataBufferFactory dataBufferFactory)
  • Method Details

    • setWriteHandler

      public void setWriteHandler(Function<reactor.core.publisher.Flux<DataBuffer>,reactor.core.publisher.Mono<Void>> writeHandler)
      Configure a custom handler to consume the response body.

      By default, response body content is consumed in full and cached for subsequent access in tests. Use this option to take control over how the response body is consumed.

      writeHandler - the write handler to use returning Mono<Void> when the body has been "written" (i.e. consumed).
    • getNativeResponse

      public <T> T getNativeResponse()
      Description copied from class: AbstractServerHttpResponse
      Return the underlying server response.

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

      Specified by:
      getNativeResponse in class AbstractServerHttpResponse
    • applyStatusCode

      protected void applyStatusCode()
      Description copied from class: AbstractServerHttpResponse
      Write the status code to the underlying response. This method is called once only.
      Specified by:
      applyStatusCode in class AbstractServerHttpResponse
    • applyHeaders

      protected void applyHeaders()
      Description copied from class: AbstractServerHttpResponse
      Invoked when the response is getting committed allowing subclasses to make apply header values to the underlying response.

      Note that some 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 might not be used other than for specialized updates such as setting the contentType or characterEncoding fields in a Servlet response.

      Specified by:
      applyHeaders in class AbstractServerHttpResponse
    • applyCookies

      protected void applyCookies()
      Description copied from class: AbstractServerHttpResponse
      Add cookies from AbstractServerHttpResponse.getHeaders() to the underlying response. This method is called once only.
      Specified by:
      applyCookies in class AbstractServerHttpResponse
    • writeWithInternal

      protected reactor.core.publisher.Mono<Void> writeWithInternal(Publisher<? extends DataBuffer> body)
      Description copied from class: AbstractServerHttpResponse
      Write to the underlying the response.
      Specified by:
      writeWithInternal in class AbstractServerHttpResponse
      body - the publisher to write with
    • writeAndFlushWithInternal

      protected reactor.core.publisher.Mono<Void> writeAndFlushWithInternal(Publisher<? extends Publisher<? extends DataBuffer>> body)
      Description copied from class: AbstractServerHttpResponse
      Write to the underlying the response, and flush after each Publisher<DataBuffer>.
      Specified by:
      writeAndFlushWithInternal in class AbstractServerHttpResponse
      body - the publisher to write and flush with
    • 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
      setComplete in class AbstractServerHttpResponse
      a Mono that indicates completion or error
    • getBody

      public reactor.core.publisher.Flux<DataBuffer> getBody()
      Return the response body or an error stream if the body was not set.
    • getBodyAsString

      public reactor.core.publisher.Mono<String> getBodyAsString()
      Aggregate response data and convert to a String using the "Content-Type" charset or "UTF-8" by default.