public class ViewResolutionResultHandler extends AbstractHandlerResultHandler implements HandlerResultHandler, Ordered
HandlerResultHandler
that encapsulates the view resolution algorithm
supporting the following return types:
View
Model
Map
@ModelAttribute
Non-simple
return types are
treated as a model attribute
A String-based view name is resolved through the configured
ViewResolver
instances into a View
to use for rendering.
If a view is left unspecified (e.g. by returning null
or a
model-related return value), a default view name is selected.
By default this resolver is ordered at Ordered.LOWEST_PRECEDENCE
and generally needs to be late in the order since it interprets any String
return value as a view name while others may interpret the same otherwise
based on annotations (e.g. for @ResponseBody
).
Modifier and Type | Field and Description |
---|---|
private java.util.List<View> |
defaultViews |
private static java.lang.Object |
NO_VALUE |
private static <any> |
NO_VALUE_MONO |
private HttpRequestPathHelper |
pathHelper |
private java.util.List<ViewResolver> |
viewResolvers |
HIGHEST_PRECEDENCE, LOWEST_PRECEDENCE
Constructor and Description |
---|
ViewResolutionResultHandler(java.util.List<ViewResolver> resolvers,
RequestedContentTypeResolver contentTypeResolver)
Constructor with
ViewResolver s and a RequestedContentTypeResolver . |
ViewResolutionResultHandler(java.util.List<ViewResolver> resolvers,
RequestedContentTypeResolver contentTypeResolver,
ReactiveAdapterRegistry adapterRegistry)
Constructor with
ViewResolver s tand a ConversionService . |
Modifier and Type | Method and Description |
---|---|
private void |
addBindingResult(HandlerResult result,
ServerWebExchange exchange) |
protected java.lang.String |
getDefaultViewName(HandlerResult result,
ServerWebExchange exchange)
Select a default view name when a controller leaves the view unspecified.
|
java.util.List<View> |
getDefaultViews()
Return the configured default
View 's. |
private java.util.List<MediaType> |
getMediaTypes(java.util.List<View> views) |
private java.lang.String |
getNameForReturnValue(java.lang.Class<?> returnValueType,
MethodParameter returnType)
Return the name of a model attribute return value based on the method
@ModelAttribute annotation, if present, or derived from the type
of the return value otherwise. |
java.util.List<ViewResolver> |
getViewResolvers()
Return a read-only list of view resolvers.
|
<any> |
handleResult(ServerWebExchange exchange,
HandlerResult result)
Process the given result modifying response headers and/or writing data
to the response.
|
private boolean |
hasModelAttributeAnnotation(HandlerResult result) |
private boolean |
isBindingCandidate(java.lang.String name,
java.lang.Object value) |
private boolean |
isSupportedType(java.lang.Class<?> clazz) |
private <any> |
render(java.util.List<View> views,
java.util.Map<java.lang.String,java.lang.Object> model,
ServerWebExchange exchange) |
private <any> |
resolveAsyncAttributes(java.util.Map<java.lang.String,java.lang.Object> model) |
private <any> |
resolveViews(java.lang.String viewName,
java.util.Locale locale) |
void |
setDefaultViews(java.util.List<View> defaultViews)
Set the default views to consider always when resolving view names and
trying to satisfy the best matching content type.
|
boolean |
supports(HandlerResult result)
Whether this handler supports the given
HandlerResult . |
getAdapterRegistry, getContentTypeResolver, getOrder, selectMediaType, setOrder
private static final java.lang.Object NO_VALUE
private static final <any> NO_VALUE_MONO
private final java.util.List<ViewResolver> viewResolvers
private final java.util.List<View> defaultViews
private final HttpRequestPathHelper pathHelper
public ViewResolutionResultHandler(java.util.List<ViewResolver> resolvers, RequestedContentTypeResolver contentTypeResolver)
ViewResolver
s and a RequestedContentTypeResolver
.resolvers
- the resolver to usecontentTypeResolver
- for resolving the requested content typepublic ViewResolutionResultHandler(java.util.List<ViewResolver> resolvers, RequestedContentTypeResolver contentTypeResolver, ReactiveAdapterRegistry adapterRegistry)
ViewResolver
s tand a ConversionService
.resolvers
- the resolver to usecontentTypeResolver
- for resolving the requested content typeadapterRegistry
- for adapting from other reactive types (e.g.
rx.Single) to Monopublic java.util.List<ViewResolver> getViewResolvers()
public void setDefaultViews(java.util.List<View> defaultViews)
public java.util.List<View> getDefaultViews()
View
's.public boolean supports(HandlerResult result)
HandlerResultHandler
HandlerResult
.supports
in interface HandlerResultHandler
result
- result object to checkprivate boolean hasModelAttributeAnnotation(HandlerResult result)
private boolean isSupportedType(java.lang.Class<?> clazz)
public <any> handleResult(ServerWebExchange exchange, HandlerResult result)
HandlerResultHandler
handleResult
in interface HandlerResultHandler
exchange
- current server exchangeresult
- the result from the handlingMono<Void>
to indicate when request handling is complete.protected java.lang.String getDefaultViewName(HandlerResult result, ServerWebExchange exchange)
private <any> resolveViews(java.lang.String viewName, java.util.Locale locale)
private java.lang.String getNameForReturnValue(java.lang.Class<?> returnValueType, MethodParameter returnType)
@ModelAttribute
annotation, if present, or derived from the type
of the return value otherwise.private <any> resolveAsyncAttributes(java.util.Map<java.lang.String,java.lang.Object> model)
private void addBindingResult(HandlerResult result, ServerWebExchange exchange)
private boolean isBindingCandidate(java.lang.String name, java.lang.Object value)
private <any> render(java.util.List<View> views, java.util.Map<java.lang.String,java.lang.Object> model, ServerWebExchange exchange)