Class ServletModelAttributeMethodProcessor
java.lang.Object
org.springframework.web.method.annotation.ModelAttributeMethodProcessor
org.springframework.web.servlet.mvc.method.annotation.ServletModelAttributeMethodProcessor
- All Implemented Interfaces:
HandlerMethodArgumentResolver
,HandlerMethodReturnValueHandler
A Servlet-specific
ModelAttributeMethodProcessor
that applies data
binding through a WebDataBinder of type ServletRequestDataBinder
.
Also adds a fall-back strategy to instantiate the model attribute from a URI template variable or from a request parameter if the name matches the model attribute name and there is an appropriate type conversion strategy.
- Since:
- 3.1
- Author:
- Rossen Stoyanchev, Juergen Hoeller
-
Field Summary
Fields inherited from class org.springframework.web.method.annotation.ModelAttributeMethodProcessor
logger
-
Constructor Summary
ConstructorDescriptionServletModelAttributeMethodProcessor
(boolean annotationNotRequired) Class constructor. -
Method Summary
Modifier and TypeMethodDescriptionprotected void
bindRequestParameters
(WebDataBinder binder, NativeWebRequest request) Downcast toServletRequestDataBinder
to invokebind(ServletRequest)
.protected void
constructAttribute
(WebDataBinder binder, NativeWebRequest request) Downcast toServletRequestDataBinder
to invokeconstructTarget(ServletRequest)
.protected final Object
createAttribute
(String attributeName, MethodParameter parameter, WebDataBinderFactory binderFactory, NativeWebRequest request) Instantiate the model attribute from a URI template variable or from a request parameter if the name matches to the model attribute name and if there is an appropriate type conversion strategy.protected Object
createAttributeFromRequestValue
(String sourceValue, String attributeName, MethodParameter parameter, WebDataBinderFactory binderFactory, NativeWebRequest request) Create a model attribute from a String request value (e.g.protected String
getRequestValueForAttribute
(String attributeName, NativeWebRequest request) Obtain a value from the request that may be used to instantiate the model attribute through type conversion from String to the target type.getUriTemplateVariables
(NativeWebRequest request) Methods inherited from class org.springframework.web.method.annotation.ModelAttributeMethodProcessor
handleReturnValue, isBindExceptionRequired, isBindExceptionRequired, resolveArgument, supportsParameter, supportsReturnType, validateIfApplicable
-
Constructor Details
-
ServletModelAttributeMethodProcessor
public ServletModelAttributeMethodProcessor(boolean annotationNotRequired) Class constructor.- Parameters:
annotationNotRequired
- if "true", non-simple method arguments and return values are considered model attributes with or without a@ModelAttribute
annotation
-
-
Method Details
-
createAttribute
protected final Object createAttribute(String attributeName, MethodParameter parameter, WebDataBinderFactory binderFactory, NativeWebRequest request) throws Exception Instantiate the model attribute from a URI template variable or from a request parameter if the name matches to the model attribute name and if there is an appropriate type conversion strategy. If none of these are true delegate back to the base class.- Overrides:
createAttribute
in classModelAttributeMethodProcessor
- Parameters:
attributeName
- the name of the attribute (nevernull
)parameter
- the method parameter declarationbinderFactory
- for creating WebDataBinder instancerequest
- the current request- Returns:
- the created model attribute, or
null
- Throws:
Exception
- See Also:
-
getRequestValueForAttribute
@Nullable protected String getRequestValueForAttribute(String attributeName, NativeWebRequest request) Obtain a value from the request that may be used to instantiate the model attribute through type conversion from String to the target type.The default implementation looks for the attribute name to match a URI variable first and then a request parameter.
- Parameters:
attributeName
- the model attribute namerequest
- the current request- Returns:
- the request value to try to convert, or
null
if none
-
getUriTemplateVariables
-
createAttributeFromRequestValue
@Nullable protected Object createAttributeFromRequestValue(String sourceValue, String attributeName, MethodParameter parameter, WebDataBinderFactory binderFactory, NativeWebRequest request) throws Exception Create a model attribute from a String request value (e.g. URI template variable, request parameter) using type conversion.The default implementation converts only if there is a registered
Converter
that can perform the conversion.- Parameters:
sourceValue
- the source value to create the model attribute fromattributeName
- the name of the attribute (nevernull
)parameter
- the method parameterbinderFactory
- for creating WebDataBinder instancerequest
- the current request- Returns:
- the created model attribute, or
null
if no suitable conversion found - Throws:
Exception
-
constructAttribute
Downcast toServletRequestDataBinder
to invokeconstructTarget(ServletRequest)
.- Overrides:
constructAttribute
in classModelAttributeMethodProcessor
- Parameters:
binder
- the data binder instance to use for the bindingrequest
- the current request
-
bindRequestParameters
Downcast toServletRequestDataBinder
to invokebind(ServletRequest)
.- Overrides:
bindRequestParameters
in classModelAttributeMethodProcessor
- Parameters:
binder
- the data binder instance to use for the bindingrequest
- the current request
-