Class AbstractNamedValueArgumentResolver
java.lang.Object
org.springframework.web.reactive.result.method.HandlerMethodArgumentResolverSupport
org.springframework.web.reactive.result.method.annotation.AbstractNamedValueArgumentResolver
- All Implemented Interfaces:
HandlerMethodArgumentResolver
- Direct Known Subclasses:
AbstractNamedValueSyncArgumentResolver, SessionAttributeMethodArgumentResolver
public abstract class AbstractNamedValueArgumentResolver
extends HandlerMethodArgumentResolverSupport
Abstract base class for resolving method arguments from a named value.
Request parameters, request headers, and path variables are examples of named
values. Each may have a name, a required flag, and a default value.
Subclasses define how to do the following:
- Obtain named value information for a method parameter
- Resolve names into argument values
- Handle missing argument values when argument values are required
- Optionally handle a resolved value
A default value string can contain ${...} placeholders and Spring Expression
Language #{...} expressions. For this to work a
ConfigurableBeanFactory must be supplied to the class constructor.
- Since:
- 5.0
- Author:
- Rossen Stoyanchev, Sebastien Deleuze
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprotected static classRepresents the information about a named value, including name, whether it's required and a default value. -
Field Summary
Fields inherited from class HandlerMethodArgumentResolverSupport
logger -
Constructor Summary
ConstructorsConstructorDescriptionAbstractNamedValueArgumentResolver(@Nullable ConfigurableBeanFactory factory, ReactiveAdapterRegistry registry) Create a newAbstractNamedValueArgumentResolverinstance. -
Method Summary
Modifier and TypeMethodDescriptionprotected abstract AbstractNamedValueArgumentResolver.NamedValueInfocreateNamedValueInfo(MethodParameter parameter) Create theAbstractNamedValueArgumentResolver.NamedValueInfoobject for the given method parameter.protected voidhandleMissingValue(String name, MethodParameter parameter) Invoked when a named value is required, butresolveName(String, MethodParameter, ServerWebExchange)returnednulland there is no default value.protected voidhandleMissingValue(String name, MethodParameter parameter, ServerWebExchange exchange) Invoked when a named value is required, butresolveName(String, MethodParameter, ServerWebExchange)returnednulland there is no default value.protected voidhandleResolvedValue(@Nullable Object arg, String name, MethodParameter parameter, Model model, ServerWebExchange exchange) Invoked after a value is resolved.reactor.core.publisher.Mono<Object> resolveArgument(MethodParameter parameter, BindingContext bindingContext, ServerWebExchange exchange) Resolve the value for the method parameter.protected abstract reactor.core.publisher.Mono<Object> resolveName(String name, MethodParameter parameter, ServerWebExchange exchange) Resolve the given parameter type and value name into an argument value.Methods inherited from class HandlerMethodArgumentResolverSupport
checkAnnotatedParamNoReactiveWrapper, checkParameterType, checkParameterTypeNoReactiveWrapper, getAdapterRegistryMethods inherited from class Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface HandlerMethodArgumentResolver
supportsParameter
-
Constructor Details
-
AbstractNamedValueArgumentResolver
public AbstractNamedValueArgumentResolver(@Nullable ConfigurableBeanFactory factory, ReactiveAdapterRegistry registry) Create a newAbstractNamedValueArgumentResolverinstance.- Parameters:
factory- a bean factory to use for resolving${...}placeholder and#{...}SpEL expressions in default values, ornullif default values are not expected to contain expressionsregistry- for checking reactive type wrappers
-
-
Method Details
-
resolveArgument
public reactor.core.publisher.Mono<Object> resolveArgument(MethodParameter parameter, BindingContext bindingContext, ServerWebExchange exchange) Description copied from interface:HandlerMethodArgumentResolverResolve the value for the method parameter.- Parameters:
parameter- the method parameterbindingContext- the binding context to useexchange- the current exchange- Returns:
Monofor the argument value, possibly empty
-
createNamedValueInfo
protected abstract AbstractNamedValueArgumentResolver.NamedValueInfo createNamedValueInfo(MethodParameter parameter) Create theAbstractNamedValueArgumentResolver.NamedValueInfoobject for the given method parameter. Implementations typically retrieve the method annotation by means ofMethodParameter.getParameterAnnotation(Class).- Parameters:
parameter- the method parameter- Returns:
- the named value information
-
resolveName
protected abstract reactor.core.publisher.Mono<Object> resolveName(String name, MethodParameter parameter, ServerWebExchange exchange) Resolve the given parameter type and value name into an argument value.- Parameters:
name- the name of the value being resolvedparameter- the method parameter to resolve to an argument value (pre-nested in case of aOptionaldeclaration)exchange- the current exchange- Returns:
- the resolved argument (may be empty
Mono)
-
handleMissingValue
protected void handleMissingValue(String name, MethodParameter parameter, ServerWebExchange exchange) Invoked when a named value is required, butresolveName(String, MethodParameter, ServerWebExchange)returnednulland there is no default value. Subclasses typically throw an exception in this case.- Parameters:
name- the name for the valueparameter- the method parameterexchange- the current exchange
-
handleMissingValue
Invoked when a named value is required, butresolveName(String, MethodParameter, ServerWebExchange)returnednulland there is no default value. Subclasses typically throw an exception in this case.- Parameters:
name- the name for the valueparameter- the method parameter
-
handleResolvedValue
protected void handleResolvedValue(@Nullable Object arg, String name, MethodParameter parameter, Model model, ServerWebExchange exchange) Invoked after a value is resolved.- Parameters:
arg- the resolved argument valuename- the argument nameparameter- the argument parameter typemodel- the modelexchange- the current exchange
-