org.springframework.web.bind

## Class ServletRequestDataBinder

- java.lang.Object
- - org.springframework.validation.DataBinder
  - - org.springframework.web.bind.WebDataBinder
    - - org.springframework.web.bind.ServletRequestDataBinder

- All Implemented Interfaces:
    PropertyEditorRegistry, TypeConverter
  Direct Known Subclasses:
    ExtendedServletRequestDataBinder

      public class ServletRequestDataBinder
      extends WebDataBinder

  Special `DataBinder` to perform data binding from servlet request parameters to JavaBeans, including support for multipart files.

  See the DataBinder/WebDataBinder superclasses for customization options, which include specifying allowed/required fields, and registering custom property editors.

  Used by Spring Web MVC's BaseCommandController and MultiActionController. Note that BaseCommandController and its subclasses allow for easy customization of the binder instances that they use through overriding `initBinder`.

  Can also be used for manual data binding in custom web controllers: for example, in a plain Controller implementation or in a MultiActionController handler method. Simply instantiate a ServletRequestDataBinder for each binding process, and invoke `bind` with the current ServletRequest as argument:

       MyBean myBean = new MyBean();
       // apply binder to custom target object
       ServletRequestDataBinder binder = new ServletRequestDataBinder(myBean);
       // register custom editors, if desired
       binder.registerCustomEditor(...);
       // trigger actual binding of request parameters
       binder.bind(request);
       // optionally evaluate binding errors
       Errors errors = binder.getErrors();
       ...

  Author:
    Rod Johnson, Juergen Hoeller
  See Also:
    `bind(javax.servlet.ServletRequest)`, `DataBinder.registerCustomEditor(java.lang.Class<?>, java.beans.PropertyEditor)`, `DataBinder.setAllowedFields(java.lang.String...)`, `DataBinder.setRequiredFields(java.lang.String...)`, `WebDataBinder.setFieldMarkerPrefix(java.lang.String)`, `BaseCommandController.initBinder(javax.servlet.http.HttpServletRequest, org.springframework.web.bind.ServletRequestDataBinder)`

- - ### Field Summary

    - ### Fields inherited from class org.springframework.web.bind.WebDataBinder

      `DEFAULT_FIELD_DEFAULT_PREFIX, DEFAULT_FIELD_MARKER_PREFIX`

    - ### Fields inherited from class org.springframework.validation.DataBinder

      `DEFAULT_AUTO_GROW_COLLECTION_LIMIT, DEFAULT_OBJECT_NAME, logger`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `ServletRequestDataBinder(Object target)` Create a new ServletRequestDataBinder instance, with default object name.
    `ServletRequestDataBinder(Object target, String objectName)` Create a new ServletRequestDataBinder instance.

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected void` | `addBindValues(MutablePropertyValues mpvs, ServletRequest request)` Extension point that subclasses can use to add extra bind values for a request.
    `void` | `bind(ServletRequest request)` Bind the parameters of the given request to this binder's target, also binding multipart files in case of a multipart request.
    `void` | `closeNoCatch()` Treats errors as fatal.

    - ### Methods inherited from class org.springframework.web.bind.WebDataBinder

      `bindMultipart, bindMultipartFiles, checkFieldDefaults, checkFieldMarkers, doBind, getEmptyValue, getFieldDefaultPrefix, getFieldMarkerPrefix, isBindEmptyMultipartFiles, setBindEmptyMultipartFiles, setFieldDefaultPrefix, setFieldMarkerPrefix`

    - ### Methods inherited from class org.springframework.validation.DataBinder

      `applyPropertyValues, bind, checkAllowedFields, checkRequiredFields, close, convertIfNecessary, convertIfNecessary, convertIfNecessary, findCustomEditor, getAllowedFields, getAutoGrowCollectionLimit, getBindingErrorProcessor, getBindingResult, getConversionService, getDisallowedFields, getErrors, getInternalBindingResult, getObjectName, getPropertyAccessor, getPropertyEditorRegistry, getRequiredFields, getSimpleTypeConverter, getTarget, getTypeConverter, getValidator, initBeanPropertyAccess, initDirectFieldAccess, isAllowed, isAutoGrowNestedPaths, isIgnoreInvalidFields, isIgnoreUnknownFields, registerCustomEditor, registerCustomEditor, setAllowedFields, setAutoGrowCollectionLimit, setAutoGrowNestedPaths, setBindingErrorProcessor, setConversionService, setDisallowedFields, setExtractOldValueForEditor, setIgnoreInvalidFields, setIgnoreUnknownFields, setMessageCodesResolver, setRequiredFields, setValidator, validate, validate`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### ServletRequestDataBinder

          public ServletRequestDataBinder(Object target)

      Create a new ServletRequestDataBinder instance, with default object name.
      Parameters:
        `target` - the target object to bind onto (or `null` if the binder is just used to convert a plain parameter value)
      See Also:
        `DataBinder.DEFAULT_OBJECT_NAME`

    - #### ServletRequestDataBinder

          public ServletRequestDataBinder(Object target,
                                  String objectName)

      Create a new ServletRequestDataBinder instance.
      Parameters:
        `target` - the target object to bind onto (or `null` if the binder is just used to convert a plain parameter value)
        `objectName` - the name of the target object

  - ### Method Detail

    - #### bind

          public void bind(ServletRequest request)

      Bind the parameters of the given request to this binder's target, also binding multipart files in case of a multipart request.

      This call can create field errors, representing basic binding errors like a required field (code "required"), or type mismatch between value and bean property (code "typeMismatch").

      Multipart files are bound via their parameter name, just like normal HTTP parameters: i.e. "uploadedFile" to an "uploadedFile" bean property, invoking a "setUploadedFile" setter method.

      The type of the target property for a multipart file can be MultipartFile, byte[], or String. The latter two receive the contents of the uploaded file; all metadata like original file name, content type, etc are lost in those cases.

      Parameters:
        `request` - request with parameters to bind (can be multipart)
      See Also:
        `MultipartHttpServletRequest`, `MultipartFile`, `WebDataBinder.bindMultipartFiles(java.util.Map<java.lang.String, org.springframework.web.multipart.MultipartFile>, org.springframework.beans.MutablePropertyValues)`, `DataBinder.bind(org.springframework.beans.PropertyValues)`

    - #### addBindValues

          protected void addBindValues(MutablePropertyValues mpvs,
                           ServletRequest request)

      Extension point that subclasses can use to add extra bind values for a request. Invoked before `WebDataBinder.doBind(MutablePropertyValues)`. The default implementation is empty.
      Parameters:
        `mpvs` - the property values that will be used for data binding
        `request` - the current request

    - #### closeNoCatch

          public void closeNoCatch()
                            throws ServletRequestBindingException

      Treats errors as fatal.

      Use this method only if it's an error if the input isn't valid. This might be appropriate if all input is from dropdowns, for example.

      Throws:
        `ServletRequestBindingException` - subclass of ServletException on any binding problem