Class InvocableHandlerMethod
- Direct Known Subclasses:
ServletInvocableHandlerMethod
HandlerMethod
that invokes the underlying method with
argument values resolved from the current HTTP request through a list of
HandlerMethodArgumentResolver
.- Since:
- 3.1
- Author:
- Rossen Stoyanchev, Juergen Hoeller, Sebastien Deleuze
-
Nested Class Summary
Nested classes/interfaces inherited from class org.springframework.web.method.HandlerMethod
HandlerMethod.HandlerMethodParameter
-
Field Summary
Fields inherited from class org.springframework.web.method.HandlerMethod
logger
-
Constructor Summary
ModifierConstructorDescriptionInvocableHandlerMethod
(Object bean, Method method) Create an instance from a bean instance and a method.protected
InvocableHandlerMethod
(Object bean, Method method, MessageSource messageSource) Variant ofInvocableHandlerMethod(Object, Method)
that also accepts aMessageSource
, for use in subclasses.InvocableHandlerMethod
(Object bean, String methodName, Class<?>... parameterTypes) Construct a new handler method with the given bean instance, method name and parameters.InvocableHandlerMethod
(HandlerMethod handlerMethod) Create an instance from aHandlerMethod
. -
Method Summary
Modifier and TypeMethodDescriptionprotected Object
Invoke the handler method with the given argument values.protected Object[]
getMethodArgumentValues
(NativeWebRequest request, ModelAndViewContainer mavContainer, Object... providedArgs) Get the method argument values for the current request, checking the provided argument values and falling back to the configured argument resolvers.invokeForRequest
(NativeWebRequest request, ModelAndViewContainer mavContainer, Object... providedArgs) Invoke the method after resolving its argument values in the context of the given request.protected Object
invokeSuspendingFunction
(Method method, Object target, Object[] args) Invoke the given Kotlin coroutine suspended function.void
setDataBinderFactory
(WebDataBinderFactory dataBinderFactory) Set theWebDataBinderFactory
to be passed to argument resolvers allowing them to create aWebDataBinder
for data binding and type conversion purposes.void
setHandlerMethodArgumentResolvers
(HandlerMethodArgumentResolverComposite argumentResolvers) SetHandlerMethodArgumentResolvers
to use for resolving method argument values.void
setParameterNameDiscoverer
(ParameterNameDiscoverer parameterNameDiscoverer) Set the ParameterNameDiscoverer for resolving parameter names when needed (e.g.Methods inherited from class org.springframework.web.method.HandlerMethod
assertTargetBean, createWithResolvedBean, equals, findProvidedArgument, formatArgumentError, formatInvokeError, getBean, getBeanType, getBridgedMethod, getMethod, getMethodAnnotation, getMethodParameters, getResolvedFromHandlerMethod, getResponseStatus, getResponseStatusReason, getReturnType, getReturnValueType, getShortLogMessage, hashCode, hasMethodAnnotation, isVoid, toString
-
Constructor Details
-
InvocableHandlerMethod
Create an instance from aHandlerMethod
. -
InvocableHandlerMethod
Create an instance from a bean instance and a method. -
InvocableHandlerMethod
Variant ofInvocableHandlerMethod(Object, Method)
that also accepts aMessageSource
, for use in subclasses.- Since:
- 5.3.10
-
InvocableHandlerMethod
public InvocableHandlerMethod(Object bean, String methodName, Class<?>... parameterTypes) throws NoSuchMethodException Construct a new handler method with the given bean instance, method name and parameters.- Parameters:
bean
- the object beanmethodName
- the method nameparameterTypes
- the method parameter types- Throws:
NoSuchMethodException
- when the method cannot be found
-
-
Method Details
-
setHandlerMethodArgumentResolvers
public void setHandlerMethodArgumentResolvers(HandlerMethodArgumentResolverComposite argumentResolvers) SetHandlerMethodArgumentResolvers
to use for resolving method argument values. -
setParameterNameDiscoverer
Set the ParameterNameDiscoverer for resolving parameter names when needed (e.g. default request attribute name).Default is a
DefaultParameterNameDiscoverer
. -
setDataBinderFactory
Set theWebDataBinderFactory
to be passed to argument resolvers allowing them to create aWebDataBinder
for data binding and type conversion purposes. -
invokeForRequest
@Nullable public Object invokeForRequest(NativeWebRequest request, @Nullable ModelAndViewContainer mavContainer, Object... providedArgs) throws Exception Invoke the method after resolving its argument values in the context of the given request.Argument values are commonly resolved through
HandlerMethodArgumentResolvers
. TheprovidedArgs
parameter however may supply argument values to be used directly, i.e. without argument resolution. Examples of provided argument values include aWebDataBinder
, aSessionStatus
, or a thrown exception instance. Provided argument values are checked before argument resolvers.Delegates to
getMethodArgumentValues(org.springframework.web.context.request.NativeWebRequest, org.springframework.web.method.support.ModelAndViewContainer, java.lang.Object...)
and callsdoInvoke(java.lang.Object...)
with the resolved arguments.- Parameters:
request
- the current requestmavContainer
- the ModelAndViewContainer for this requestprovidedArgs
- "given" arguments matched by type, not resolved- Returns:
- the raw value returned by the invoked method
- Throws:
Exception
- raised if no suitable argument resolver can be found, or if the method raised an exception- See Also:
-
getMethodArgumentValues
protected Object[] getMethodArgumentValues(NativeWebRequest request, @Nullable ModelAndViewContainer mavContainer, Object... providedArgs) throws Exception Get the method argument values for the current request, checking the provided argument values and falling back to the configured argument resolvers.The resulting array will be passed into
doInvoke(java.lang.Object...)
.- Throws:
Exception
- Since:
- 5.1.2
-
doInvoke
Invoke the handler method with the given argument values.- Throws:
Exception
-
invokeSuspendingFunction
Invoke the given Kotlin coroutine suspended function.The default implementation invokes
CoroutinesUtils.invokeSuspendingFunction(Method, Object, Object...)
, but subclasses can override this method to useCoroutinesUtils.invokeSuspendingFunction(kotlin.coroutines.CoroutineContext, Method, Object, Object...)
instead.- Since:
- 6.0
-