public class ServletRequestDataBinder extends WebDataBinder
DataBinder
to perform data binding
from servlet request parameters to JavaBeans, including support for multipart files.
WARNING: Data binding can lead to security issues by exposing parts of the object graph that are not meant to be accessed or modified by external clients. Therefore the design and use of data binding should be considered carefully with regard to security. For more details, please refer to the dedicated sections on data binding for Spring Web MVC and Spring WebFlux in the reference manual.
See the DataBinder/WebDataBinder superclasses for customization options, which include specifying allowed/required fields, and registering custom property editors.
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(); ...
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)
DEFAULT_FIELD_DEFAULT_PREFIX, DEFAULT_FIELD_MARKER_PREFIX
DEFAULT_AUTO_GROW_COLLECTION_LIMIT, DEFAULT_OBJECT_NAME, logger
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.
|
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.
|
bindMultipart, checkFieldDefaults, checkFieldMarkers, doBind, getEmptyValue, getEmptyValue, getFieldDefaultPrefix, getFieldMarkerPrefix, isBindEmptyMultipartFiles, setBindEmptyMultipartFiles, setFieldDefaultPrefix, setFieldMarkerPrefix
addCustomFormatter, addCustomFormatter, addCustomFormatter, addValidators, applyPropertyValues, bind, checkAllowedFields, checkRequiredFields, close, convertIfNecessary, convertIfNecessary, convertIfNecessary, convertIfNecessary, createBeanPropertyBindingResult, createDirectFieldBindingResult, findCustomEditor, getAllowedFields, getAutoGrowCollectionLimit, getBindingErrorProcessor, getBindingResult, getConversionService, getDisallowedFields, getInternalBindingResult, getObjectName, getPropertyAccessor, getPropertyEditorRegistry, getRequiredFields, getSimpleTypeConverter, getTarget, getTypeConverter, getValidator, getValidators, initBeanPropertyAccess, initDirectFieldAccess, isAllowed, isAutoGrowNestedPaths, isIgnoreInvalidFields, isIgnoreUnknownFields, registerCustomEditor, registerCustomEditor, replaceValidators, setAllowedFields, setAutoGrowCollectionLimit, setAutoGrowNestedPaths, setBindingErrorProcessor, setConversionService, setDisallowedFields, setIgnoreInvalidFields, setIgnoreUnknownFields, setMessageCodesResolver, setRequiredFields, setValidator, validate, validate
public ServletRequestDataBinder(@Nullable Object target)
target
- the target object to bind onto (or null
if the binder is just used to convert a plain parameter value)DataBinder.DEFAULT_OBJECT_NAME
public ServletRequestDataBinder(@Nullable Object target, String objectName)
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 objectpublic void bind(ServletRequest 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.
request
- the request with parameters to bind (can be multipart)MultipartHttpServletRequest
,
MultipartFile
,
DataBinder.bind(org.springframework.beans.PropertyValues)
protected void addBindValues(MutablePropertyValues mpvs, ServletRequest request)
WebDataBinder.doBind(MutablePropertyValues)
.
The default implementation is empty.mpvs
- the property values that will be used for data bindingrequest
- the current requestpublic void closeNoCatch() throws ServletRequestBindingException
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.
ServletRequestBindingException
- subclass of ServletException on any binding problem