Package 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`

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
Description
`AbstractServerHttpResponse(org.springframework.core.io.buffer.DataBufferFactory dataBufferFactory)`
`AbstractServerHttpResponse(org.springframework.core.io.buffer.DataBufferFactory dataBufferFactory, HttpHeaders headers)`

## Method Summary

Modifier and Type
Method
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.
`final org.springframework.core.io.buffer.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.
`org.springframework.util.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.
`HttpStatusCode`
`getStatusCode()`
Return the status code that has been set, or otherwise fall back on the status of the response from the underlying server.
`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 as an integer.
`boolean`
`setStatusCode(HttpStatusCode status)`
Set the HTTP status code of the response.
`protected void`
`touchDataBuffer(org.springframework.core.io.buffer.DataBuffer buffer)`
Allow subclasses to associate a hint with the data buffer if it is a pooled buffer and supports leak tracking.
`final reactor.core.publisher.Mono<Void>`
`writeAndFlushWith(Publisher<? extends Publisher<? extends org.springframework.core.io.buffer.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 org.springframework.core.io.buffer.DataBuffer>> body)`
Write to the underlying the response, and flush after each `Publisher<DataBuffer>`.
`final reactor.core.publisher.Mono<Void>`
`writeWith(Publisher<? extends org.springframework.core.io.buffer.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 org.springframework.core.io.buffer.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`

### Methods inherited from interface org.springframework.http.server.reactive.ServerHttpResponse

`getRawStatusCode`

## Constructor Details

### AbstractServerHttpResponse

public AbstractServerHttpResponse(org.springframework.core.io.buffer.DataBufferFactory dataBufferFactory)

### AbstractServerHttpResponse

public AbstractServerHttpResponse(org.springframework.core.io.buffer.DataBufferFactory dataBufferFactory, HttpHeaders headers)

## Method Details

### bufferFactory

public final org.springframework.core.io.buffer.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 HttpStatusCode 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 `HttpStatusCode` value
Returns:
  `false` if the status code change wasn't processed because the HTTP response is committed, `true` if successfully set.

### getStatusCode

@Nullable public HttpStatusCode 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 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 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.

### 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 org.springframework.util.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, for example, 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 org.springframework.core.io.buffer.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 org.springframework.core.io.buffer.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 org.springframework.core.io.buffer.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 org.springframework.core.io.buffer.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 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.

### applyCookies

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

### touchDataBuffer

protected void touchDataBuffer(org.springframework.core.io.buffer.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