class ReactiveTypeHandler
extends java.lang.Object
Publisher
through the
ReactiveAdapterRegistry
.
Such return values may be bridged to a ResponseBodyEmitter
for
streaming purposes at the presence of a streaming media type or based on the
generic type.
For all other cases Publisher
output is collected and bridged to
DeferredResult
for standard async request processing.
Modifier and Type | Class and Description |
---|---|
private static class |
ReactiveTypeHandler.AbstractEmitterSubscriber |
(package private) static class |
ReactiveTypeHandler.CollectedValuesList |
private static class |
ReactiveTypeHandler.DeferredResultSubscriber |
private static class |
ReactiveTypeHandler.JsonEmitterSubscriber |
private static class |
ReactiveTypeHandler.SseEmitterSubscriber |
private static class |
ReactiveTypeHandler.TextEmitterSubscriber |
Modifier and Type | Field and Description |
---|---|
private ContentNegotiationManager |
contentNegotiationManager |
private static Log |
logger |
private ReactiveAdapterRegistry |
reactiveRegistry |
private static long |
STREAMING_TIMEOUT_VALUE |
private TaskExecutor |
taskExecutor |
Constructor and Description |
---|
ReactiveTypeHandler() |
ReactiveTypeHandler(ReactiveAdapterRegistry registry,
TaskExecutor executor,
ContentNegotiationManager manager) |
Modifier and Type | Method and Description |
---|---|
private ResponseBodyEmitter |
getEmitter(MediaType mediaType) |
private java.util.Collection<MediaType> |
getMediaTypes(NativeWebRequest request) |
ResponseBodyEmitter |
handleValue(java.lang.Object returnValue,
MethodParameter returnType,
ModelAndViewContainer mav,
NativeWebRequest request)
Process the given reactive return value and decide whether to adapt it
to a
ResponseBodyEmitter or a DeferredResult . |
boolean |
isReactiveType(java.lang.Class<?> type)
Whether the type can be adapted to a Reactive Streams
Publisher . |
private static final long STREAMING_TIMEOUT_VALUE
private static Log logger
private final ReactiveAdapterRegistry reactiveRegistry
private final TaskExecutor taskExecutor
private final ContentNegotiationManager contentNegotiationManager
public ReactiveTypeHandler()
ReactiveTypeHandler(ReactiveAdapterRegistry registry, TaskExecutor executor, ContentNegotiationManager manager)
public boolean isReactiveType(java.lang.Class<?> type)
Publisher
.@Nullable public ResponseBodyEmitter handleValue(java.lang.Object returnValue, MethodParameter returnType, ModelAndViewContainer mav, NativeWebRequest request) throws java.lang.Exception
ResponseBodyEmitter
or a DeferredResult
.null
if handled internally
with a DeferredResult
.java.lang.Exception
private java.util.Collection<MediaType> getMediaTypes(NativeWebRequest request) throws HttpMediaTypeNotAcceptableException
private ResponseBodyEmitter getEmitter(MediaType mediaType)