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
List of collect values where all elements are a specified type.
|
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 ReactiveAdapterRegistry |
adapterRegistry |
private ContentNegotiationManager |
contentNegotiationManager |
private static Log |
logger |
private static long |
STREAMING_TIMEOUT_VALUE |
private TaskExecutor |
taskExecutor |
private boolean |
taskExecutorWarning |
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 void |
logExecutorWarning(MethodParameter returnType) |
private static final long STREAMING_TIMEOUT_VALUE
private static Log logger
private final ReactiveAdapterRegistry adapterRegistry
private final TaskExecutor taskExecutor
private final ContentNegotiationManager contentNegotiationManager
private boolean taskExecutorWarning
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)
private void logExecutorWarning(MethodParameter returnType)