Top Description Inners Fields Constructors Methods
org.springframework.web.servlet.mvc.method.annotation

public Class ResponseBodyEmitterReturnValueHandler

extends Object
implements HandlerMethodReturnValueHandler
Class Inheritance
All Implemented Interfaces
org.springframework.web.method.support.HandlerMethodReturnValueHandler
Imports
java.io.IOException, java.nio.charset.StandardCharsets, java.util.ArrayList, .List, .Set, java.util.function.Consumer, jakarta.servlet.ServletRequest, jakarta.servlet.http.HttpServletResponse, org.springframework.core.MethodParameter, .ReactiveAdapterRegistry, .ResolvableType, org.springframework.core.task.TaskExecutor, org.springframework.http.HttpHeaders, .MediaType, .ResponseEntity, org.springframework.http.converter.HttpMessageConverter, .StringHttpMessageConverter, org.springframework.http.server.DelegatingServerHttpResponse, .ServerHttpResponse, .ServletServerHttpResponse, org.springframework.lang.Nullable, org.springframework.util.Assert, org.springframework.web.accept.ContentNegotiationManager, org.springframework.web.context.request.NativeWebRequest, org.springframework.web.context.request.async.DeferredResult, .WebAsyncUtils, org.springframework.web.filter.ShallowEtagHeaderFilter, org.springframework.web.method.support.HandlerMethodReturnValueHandler, .ModelAndViewContainer

Handler for return values of type ResponseBodyEmitter and subclasses such as SseEmitter including the same types wrapped with ResponseEntity.

As of 5.0 also supports reactive return value types for any reactive library with registered adapters in ReactiveAdapterRegistry.

Author
Rossen Stoyanchev
Since
4.2

Nested and Inner Type Summary

Modifier and TypeClass and Description
private class
ResponseBodyEmitterReturnValueHandler.HttpMessageConvertingHandler

ResponseBodyEmitter.Handler that writes with HttpMessageConverter's.

private static class
ResponseBodyEmitterReturnValueHandler.StreamingServletServerHttpResponse

Wrap to silently ignore header changes HttpMessageConverter's that would otherwise cause HttpHeaders to raise exceptions.

Field Summary

Modifier and TypeField and Description
private final ReactiveTypeHandler
private final List<HttpMessageConverter<?>>

Constructor Summary

AccessConstructor and Description
public
ResponseBodyEmitterReturnValueHandler(List<HttpMessageConverter<?>> messageConverters)

Simple constructor with reactive type support based on a default instance of ReactiveAdapterRegistry, org.springframework.core.task.SyncTaskExecutor, and ContentNegotiationManager with an Accept header strategy.

public
ResponseBodyEmitterReturnValueHandler(List<HttpMessageConverter<?>>
converters to write emitted objects with
messageConverters
,
ReactiveAdapterRegistry
for reactive return value type support
registry
,
TaskExecutor
for blocking I/O writes of items emitted from reactive types
executor
,
ContentNegotiationManager
for detecting streaming media types
manager
)

Complete constructor with pluggable "reactive" type support.

Method Summary

Modifier and TypeMethod and Description
public void
handleReturnValue(Object
the value returned from the handler method
returnValue
,
MethodParameter
the type of the return value. This type must have previously been passed to supportsReturnType which must have returned true.
returnType
,
ModelAndViewContainer
the ModelAndViewContainer for the current request
mavContainer
,
NativeWebRequest
the current request
webRequest
)

Implements org.springframework.web.method.support.HandlerMethodReturnValueHandler.handleReturnValue.

Handle the given return value by adding attributes to the model and setting a view or setting the ModelAndViewContainer#setRequestHandled flag to true to indicate the response has been handled directly.

private static List<HttpMessageConverter<?>>
public boolean
supportsReturnType(MethodParameter
the method return type to check
returnType
)

Implements org.springframework.web.method.support.HandlerMethodReturnValueHandler.supportsReturnType.

Whether the given method return type is supported by this handler.

Inherited from java.lang.Object:
cloneequalsfinalizegetClasshashCodenotifynotifyAlltoStringwaitwaitwait

Field Detail

reactiveHandlerback to summary
private final ReactiveTypeHandler reactiveHandler
sseMessageConvertersback to summary
private final List<HttpMessageConverter<?>> sseMessageConverters

Constructor Detail

ResponseBodyEmitterReturnValueHandlerback to summary
public ResponseBodyEmitterReturnValueHandler(List<HttpMessageConverter<?>> messageConverters)

Simple constructor with reactive type support based on a default instance of ReactiveAdapterRegistry, org.springframework.core.task.SyncTaskExecutor, and ContentNegotiationManager with an Accept header strategy.

ResponseBodyEmitterReturnValueHandlerback to summary
public ResponseBodyEmitterReturnValueHandler(List<HttpMessageConverter<?>> messageConverters, ReactiveAdapterRegistry registry, TaskExecutor executor, ContentNegotiationManager manager)

Complete constructor with pluggable "reactive" type support.

Parameters
messageConverters:List<HttpMessageConverter<?>>

converters to write emitted objects with

registry:ReactiveAdapterRegistry

for reactive return value type support

executor:TaskExecutor

for blocking I/O writes of items emitted from reactive types

manager:ContentNegotiationManager

for detecting streaming media types

Since
5.0

Method Detail

handleReturnValueback to summary
public void handleReturnValue(Object returnValue, MethodParameter returnType, ModelAndViewContainer mavContainer, NativeWebRequest webRequest) throws Exception

Implements org.springframework.web.method.support.HandlerMethodReturnValueHandler.handleReturnValue.

Doc from org.springframework.web.method.support.HandlerMethodReturnValueHandler.handleReturnValue.

Handle the given return value by adding attributes to the model and setting a view or setting the ModelAndViewContainer#setRequestHandled flag to true to indicate the response has been handled directly.

Parameters
returnValue:Object

the value returned from the handler method

returnType:MethodParameter

the type of the return value. This type must have previously been passed to supportsReturnType which must have returned true.

mavContainer:ModelAndViewContainer

the ModelAndViewContainer for the current request

webRequest:NativeWebRequest

the current request

Annotations
@Override
@SuppressWarnings:resource
Exceptions
Exception:
if the return value handling results in an error
initSseConvertersback to summary
private static List<HttpMessageConverter<?>> initSseConverters(List<HttpMessageConverter<?>> converters)
supportsReturnTypeback to summary
public boolean supportsReturnType(MethodParameter returnType)

Implements org.springframework.web.method.support.HandlerMethodReturnValueHandler.supportsReturnType.

Doc from org.springframework.web.method.support.HandlerMethodReturnValueHandler.supportsReturnType.

Whether the given method return type is supported by this handler.

Parameters
returnType:MethodParameter

the method return type to check

Returns:boolean

true if this handler supports the supplied return type; false otherwise

Annotations
@Override
org.springframework.web.servlet.mvc.method.annotation back to summary

private Class ResponseBodyEmitterReturnValueHandler.HttpMessageConvertingHandler

extends Object
implements Handler
Class Inheritance
  • java.lang.Object
  • org.springframework.web.servlet.mvc.method.annotation.ResponseBodyEmitterReturnValueHandler.HttpMessageConvertingHandler
All Implemented Interfaces
org.springframework.web.servlet.mvc.method.annotation.ResponseBodyEmitter.Handler

ResponseBodyEmitter.Handler that writes with HttpMessageConverter's.

Field Summary

Modifier and TypeField and Description
private final DeferredResult<?>
private final ServerHttpResponse

Constructor Summary

AccessConstructor and Description
public

Method Summary

Modifier and TypeMethod and Description
public void
public void
public void
public void
public void
public void
send(Object data, MediaType mediaType)

Implements org.springframework.web.servlet.mvc.method.annotation.ResponseBodyEmitter.Handler.send.

Immediately write and flush the given data to the network.

public void
private <T> void
sendInternal(T data, MediaType mediaType)

Inherited from java.lang.Object:
cloneequalsfinalizegetClasshashCodenotifynotifyAlltoStringwaitwaitwait

Field Detail

deferredResultback to summary
private final DeferredResult<?> deferredResult
outputMessageback to summary
private final ServerHttpResponse outputMessage

Constructor Detail

HttpMessageConvertingHandlerback to summary
public HttpMessageConvertingHandler(ServerHttpResponse outputMessage, DeferredResult<?> deferredResult)

Method Detail

completeback to summary
public void complete()

Implements org.springframework.web.servlet.mvc.method.annotation.ResponseBodyEmitter.Handler.complete.

Annotations
@Override
completeWithErrorback to summary
public void completeWithError(Throwable failure)

Implements org.springframework.web.servlet.mvc.method.annotation.ResponseBodyEmitter.Handler.completeWithError.

Annotations
@Override
onCompletionback to summary
public void onCompletion(Runnable callback)

Implements org.springframework.web.servlet.mvc.method.annotation.ResponseBodyEmitter.Handler.onCompletion.

Annotations
@Override
onErrorback to summary
public void onError(Consumer<Throwable> callback)

Implements org.springframework.web.servlet.mvc.method.annotation.ResponseBodyEmitter.Handler.onError.

Annotations
@Override
onTimeoutback to summary
public void onTimeout(Runnable callback)

Implements org.springframework.web.servlet.mvc.method.annotation.ResponseBodyEmitter.Handler.onTimeout.

Annotations
@Override
sendback to summary
public void send(Object data, MediaType mediaType) throws IOException

Implements org.springframework.web.servlet.mvc.method.annotation.ResponseBodyEmitter.Handler.send.

Doc from org.springframework.web.servlet.mvc.method.annotation.ResponseBodyEmitter.Handler.send.

Immediately write and flush the given data to the network.

Annotations
@Override
sendback to summary
public void send(Set<ResponseBodyEmitter.DataWithMediaType> items) throws IOException

Implements org.springframework.web.servlet.mvc.method.annotation.ResponseBodyEmitter.Handler.send.

Doc from org.springframework.web.servlet.mvc.method.annotation.ResponseBodyEmitter.Handler.send.

Immediately write all data items then flush to the network.

Annotations
@Override
sendInternalback to summary
private <T> void sendInternal(T data, MediaType mediaType) throws IOException
Annotations
@SuppressWarnings:unchecked
org.springframework.web.servlet.mvc.method.annotation back to summary

private Class ResponseBodyEmitterReturnValueHandler.StreamingServletServerHttpResponse

extends DelegatingServerHttpResponse
Class Inheritance

Wrap to silently ignore header changes HttpMessageConverter's that would otherwise cause HttpHeaders to raise exceptions.

Field Summary

Modifier and TypeField and Description
private final HttpHeaders

Constructor Summary

AccessConstructor and Description
public

Method Summary

Modifier and TypeMethod and Description
public HttpHeaders
Inherited from org.springframework.http.server.DelegatingServerHttpResponse:
closeflushgetBodygetDelegatesetStatusCode

Field Detail

mutableHeadersback to summary
private final HttpHeaders mutableHeaders

Constructor Detail

StreamingServletServerHttpResponseback to summary
public StreamingServletServerHttpResponse(ServerHttpResponse delegate)

Method Detail

getHeadersback to summary
public HttpHeaders getHeaders()

Overrides org.springframework.http.server.DelegatingServerHttpResponse.getHeaders.

Implements org.springframework.http.HttpMessage.getHeaders.

Doc from org.springframework.http.HttpMessage.getHeaders.

Return the headers of this message.

Returns:HttpHeaders

a corresponding HttpHeaders object (never null)

Annotations
@Override