public abstract class AbstractNamedValueArgumentResolver extends HandlerMethodArgumentResolverSupport
Subclasses define how to do the following:
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.
Modifier and Type | Class and Description |
---|---|
protected static class |
AbstractNamedValueArgumentResolver.NamedValueInfo
Represents the information about a named value, including name, whether
it's required and a default value.
|
Modifier and Type | Field and Description |
---|---|
private ConfigurableBeanFactory |
configurableBeanFactory |
private BeanExpressionContext |
expressionContext |
private java.util.Map<MethodParameter,AbstractNamedValueArgumentResolver.NamedValueInfo> |
namedValueInfoCache |
Constructor and Description |
---|
AbstractNamedValueArgumentResolver(ConfigurableBeanFactory factory,
ReactiveAdapterRegistry registry) |
Modifier and Type | Method and Description |
---|---|
private java.lang.Object |
applyConversion(java.lang.Object value,
AbstractNamedValueArgumentResolver.NamedValueInfo namedValueInfo,
MethodParameter parameter,
BindingContext bindingContext,
ServerWebExchange exchange)
Apply type conversion if necessary.
|
protected abstract AbstractNamedValueArgumentResolver.NamedValueInfo |
createNamedValueInfo(MethodParameter parameter)
Create the
AbstractNamedValueArgumentResolver.NamedValueInfo object for the given method parameter. |
private <any> |
getDefaultValue(AbstractNamedValueArgumentResolver.NamedValueInfo namedValueInfo,
MethodParameter parameter,
BindingContext bindingContext,
Model model,
ServerWebExchange exchange)
Resolve the default value, if any.
|
private AbstractNamedValueArgumentResolver.NamedValueInfo |
getNamedValueInfo(MethodParameter parameter)
Obtain the named value for the given method parameter.
|
protected void |
handleMissingValue(java.lang.String name,
MethodParameter parameter)
Invoked when a named value is required, but
resolveName(String, MethodParameter, ServerWebExchange) returned
null and there is no default value. |
protected void |
handleMissingValue(java.lang.String name,
MethodParameter parameter,
ServerWebExchange exchange)
Invoked when a named value is required, but
resolveName(String, MethodParameter, ServerWebExchange) returned
null and there is no default value. |
private java.lang.Object |
handleNullValue(java.lang.String name,
java.lang.Object value,
java.lang.Class<?> paramType)
A
null results in a false value for boolean s or
an exception for other primitives. |
protected void |
handleResolvedValue(java.lang.Object arg,
java.lang.String name,
MethodParameter parameter,
Model model,
ServerWebExchange exchange)
Invoked after a value is resolved.
|
<any> |
resolveArgument(MethodParameter parameter,
BindingContext bindingContext,
ServerWebExchange exchange)
Resolve the value for the method parameter.
|
protected abstract <any> |
resolveName(java.lang.String name,
MethodParameter parameter,
ServerWebExchange exchange)
Resolve the given parameter type and value name into an argument value.
|
private java.lang.Object |
resolveStringValue(java.lang.String value)
Resolve the given annotation-specified value,
potentially containing placeholders and expressions.
|
private AbstractNamedValueArgumentResolver.NamedValueInfo |
updateNamedValueInfo(MethodParameter parameter,
AbstractNamedValueArgumentResolver.NamedValueInfo info)
Create a new NamedValueInfo based on the given NamedValueInfo with
sanitized values.
|
checkAnnotatedParamNoReactiveWrapper, checkParameterType, checkParameterTypeNoReactiveWrapper, getAdapterRegistry
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
supportsParameter
@Nullable private final ConfigurableBeanFactory configurableBeanFactory
@Nullable private final BeanExpressionContext expressionContext
private final java.util.Map<MethodParameter,AbstractNamedValueArgumentResolver.NamedValueInfo> namedValueInfoCache
public AbstractNamedValueArgumentResolver(@Nullable ConfigurableBeanFactory factory, ReactiveAdapterRegistry registry)
factory
- a bean factory to use for resolving ${...} placeholder
and #{...} SpEL expressions in default values, or null
if default
values are not expected to contain expressionsregistry
- for checking reactive type wrapperspublic <any> resolveArgument(MethodParameter parameter, BindingContext bindingContext, ServerWebExchange exchange)
HandlerMethodArgumentResolver
parameter
- the method parameterbindingContext
- the binding context to useexchange
- the current exchangeMono
for the argument value, possibly emptyprivate AbstractNamedValueArgumentResolver.NamedValueInfo getNamedValueInfo(MethodParameter parameter)
protected abstract AbstractNamedValueArgumentResolver.NamedValueInfo createNamedValueInfo(MethodParameter parameter)
AbstractNamedValueArgumentResolver.NamedValueInfo
object for the given method parameter.
Implementations typically retrieve the method annotation by means of
MethodParameter.getParameterAnnotation(Class)
.parameter
- the method parameterprivate AbstractNamedValueArgumentResolver.NamedValueInfo updateNamedValueInfo(MethodParameter parameter, AbstractNamedValueArgumentResolver.NamedValueInfo info)
@Nullable private java.lang.Object resolveStringValue(java.lang.String value)
protected abstract <any> resolveName(java.lang.String name, MethodParameter parameter, ServerWebExchange exchange)
name
- the name of the value being resolvedparameter
- the method parameter to resolve to an argument value
(pre-nested in case of a Optional
declaration)exchange
- the current exchangeMono
)@Nullable private java.lang.Object applyConversion(@Nullable java.lang.Object value, AbstractNamedValueArgumentResolver.NamedValueInfo namedValueInfo, MethodParameter parameter, BindingContext bindingContext, ServerWebExchange exchange)
private <any> getDefaultValue(AbstractNamedValueArgumentResolver.NamedValueInfo namedValueInfo, MethodParameter parameter, BindingContext bindingContext, Model model, ServerWebExchange exchange)
protected void handleMissingValue(java.lang.String name, MethodParameter parameter, ServerWebExchange exchange)
resolveName(String, MethodParameter, ServerWebExchange)
returned
null
and there is no default value. Subclasses typically throw an
exception in this case.name
- the name for the valueparameter
- the method parameterexchange
- the current exchangeprotected void handleMissingValue(java.lang.String name, MethodParameter parameter)
resolveName(String, MethodParameter, ServerWebExchange)
returned
null
and there is no default value. Subclasses typically throw an
exception in this case.name
- the name for the valueparameter
- the method parameter@Nullable private java.lang.Object handleNullValue(java.lang.String name, @Nullable java.lang.Object value, java.lang.Class<?> paramType)
null
results in a false
value for boolean
s or
an exception for other primitives.protected void handleResolvedValue(@Nullable java.lang.Object arg, java.lang.String name, MethodParameter parameter, Model model, ServerWebExchange exchange)
arg
- the resolved argument valuename
- the argument nameparameter
- the argument parameter typemodel
- the modelexchange
- the current exchange