前言:本篇主要介绍SpringMVC的数据绑定流程,后续会详细介绍数据绑定流程当中的关键步骤,包括数据转换、数据格式化以及数据校验。
本篇文章重点关注以下问题:
- 概述SpringMVC的数据绑定流程
-
类型转换、验证及格式化流程图
1. 数据绑定的流程
由上述流程可见,Spring MVC 通过反射机制对目标处理方法进行解析,将请求消息绑定到处理方法的入参中,数据绑定的核心部件是DataBinder。
步骤如下:
- SpringMVC主框架将ServletRequest对象及目标方法的入参实例传递给 WebDataBinderFactory 实例,以创建 DataBinder 实例对象;
- DataBinder 调用装配在 Spring MVC 上下文中的ConversionService 组件进行数据类型转换、数据格式化工作,将 Servlet 中的请求信息填充到入参对象中;
- 调用 Validator 组件对已经绑定了请求消息的入参对象进行数据合法性校验,并最终生成数据绑定结果BindingData对象;
- SpringMVC 抽取BindingResult 中的入参对象和校验错误对象,将它们赋给处理方法的响应入参。
2. 类型转换、验证及格式化流程图
流程如下:
- 类型转换:内部的ConversionService会根据S源类型/T目标类型自动选择相应的Converter SPI进行类型转换,而且是强类型的,能在任意类型数据之间进行转换;
- 数据验证:支持JSR-303验证框架,如将@Valid 放在需要验证的目标类型上即可;
- 格式化显示:其实就是任意目标类型---->String 的转换,完全可以使用Converter SPI完成。
- 类型转换:首先表单数据(全部是字符串)通过WebDataBinder 进行绑定到命令对象,内部通过Converter SPI实现;
- 数据验证:使用JSR-303验证框架进行验证;
- 格式化显示:在表单页面可以显示通过Converter SPI格式化的数据和错误信息:
注意:Formatter SPI内部实现实际委托给Converter SPI进行转换。