Class ServletModelAttributeMethodProcessor

java.lang.Object
org.springframework.web.method.annotation.ModelAttributeMethodProcessor
org.springframework.web.servlet.mvc.method.annotation.ServletModelAttributeMethodProcessor
All Implemented Interfaces:
org.springframework.web.method.support.HandlerMethodArgumentResolver, org.springframework.web.method.support.HandlerMethodReturnValueHandler

public class ServletModelAttributeMethodProcessor extends org.springframework.web.method.annotation.ModelAttributeMethodProcessor
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

    Constructors
    Constructor
    Description
    ServletModelAttributeMethodProcessor(boolean annotationNotRequired)
    Class constructor.
  • Method Summary

    Modifier and Type
    Method
    Description
    protected void
    bindRequestParameters(org.springframework.web.bind.WebDataBinder binder, org.springframework.web.context.request.NativeWebRequest request)
    Downcast to ServletRequestDataBinder to invoke bind(ServletRequest).
    protected void
    constructAttribute(org.springframework.web.bind.WebDataBinder binder, org.springframework.web.context.request.NativeWebRequest request)
    Downcast to ServletRequestDataBinder to invoke constructTarget(ServletRequest).
    protected final Object
    createAttribute(String attributeName, org.springframework.core.MethodParameter parameter, org.springframework.web.bind.support.WebDataBinderFactory binderFactory, org.springframework.web.context.request.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, org.springframework.core.MethodParameter parameter, org.springframework.web.bind.support.WebDataBinderFactory binderFactory, org.springframework.web.context.request.NativeWebRequest request)
    Create a model attribute from a String request value (e.g.
    protected String
    getRequestValueForAttribute(String attributeName, org.springframework.web.context.request.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.
    protected final Map<String,String>
    getUriTemplateVariables(org.springframework.web.context.request.NativeWebRequest request)
     

    Methods inherited from class org.springframework.web.method.annotation.ModelAttributeMethodProcessor

    handleReturnValue, isBindExceptionRequired, isBindExceptionRequired, resolveArgument, supportsParameter, supportsReturnType, validateIfApplicable

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • 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, org.springframework.core.MethodParameter parameter, org.springframework.web.bind.support.WebDataBinderFactory binderFactory, org.springframework.web.context.request.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 class org.springframework.web.method.annotation.ModelAttributeMethodProcessor
      Throws:
      Exception
      See Also:
    • getRequestValueForAttribute

      @Nullable protected String getRequestValueForAttribute(String attributeName, org.springframework.web.context.request.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 name
      request - the current request
      Returns:
      the request value to try to convert, or null if none
    • getUriTemplateVariables

      protected final Map<String,String> getUriTemplateVariables(org.springframework.web.context.request.NativeWebRequest request)
    • createAttributeFromRequestValue

      @Nullable protected Object createAttributeFromRequestValue(String sourceValue, String attributeName, org.springframework.core.MethodParameter parameter, org.springframework.web.bind.support.WebDataBinderFactory binderFactory, org.springframework.web.context.request.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 from
      attributeName - the name of the attribute (never null)
      parameter - the method parameter
      binderFactory - for creating WebDataBinder instance
      request - the current request
      Returns:
      the created model attribute, or null if no suitable conversion found
      Throws:
      Exception
    • constructAttribute

      protected void constructAttribute(org.springframework.web.bind.WebDataBinder binder, org.springframework.web.context.request.NativeWebRequest request)
      Downcast to ServletRequestDataBinder to invoke constructTarget(ServletRequest).
      Overrides:
      constructAttribute in class org.springframework.web.method.annotation.ModelAttributeMethodProcessor
    • bindRequestParameters

      protected void bindRequestParameters(org.springframework.web.bind.WebDataBinder binder, org.springframework.web.context.request.NativeWebRequest request)
      Downcast to ServletRequestDataBinder to invoke bind(ServletRequest).
      Overrides:
      bindRequestParameters in class org.springframework.web.method.annotation.ModelAttributeMethodProcessor