spring mvc4 数据校验(参数校验)及数据绑定流程 DataBinder spring4技术
springMVC4中对于参数(parameters)数据类型的自动转换 及格式化校验是有一套处理机制的。其流程如下:
1)Spring MVC 主框架将 ServletRequest 对象及目标方法的入参实例传递给 WebDataBinderFactory 实例,以创建 DataBinder 实例对象。
2) DataBinder 调用装配在 Spring MVC 上下文中的ConversionService 组件进行数据类型转换、数据格式化工作。将 Servlet 中的请求信息填充到入参对象中。
3) 调用 Validator 组件对已经绑定了请求消息的入参对象进行数据合法性校验,并最终生成数据绑定结果 BindingData 对象。
4)Spring MVC 抽取 BindingResult 中的入参对象和校验错误对象,将它们赋给处理方法的响应入参。
其流程图如下,核心为 DataBinder 对象:
SPRING 内置了很多类型转换器,如字符串--》integer 这些都是默认提供的,我们基本上无需自己写转换器。只有当其无法满足我的要求的时候,我们才需要编写自己的转换器。
接下来,我们自己编写一个自定义转换器:
1)技术说明:
ConversionService 是 Spring 类型转换体系的核心接口。可以利用 ConversionServiceFactoryBean 在 Spring 的 IOC 容器中定义一个 ConversionService. Spring 将自动识别出 IOC 容器中的 ConversionService,并在 Bean 属性配置及Spring MVC 处理方法入参绑定等场合使用它进行数据的转换可通过 ConversionServiceFactoryBean 的 converters 属性注册自定义的类型转换器。
定义转换器有三种规格:
Spring 定义了 3 种类型的转换器接口,实现任意一个转换器接口都可以作为自定义转换器注册到onversionServiceFactroyBean 中:
Converter<S,T>:将 S 类型对象转为 T 类型对象;
ConverterFactory:将相同系列多个 “同质” Converter 封装在一 起。如果希望将一种类型的对象转换为另一种类型及其子类的对象(例如将 String 转换为 Number 及 Number 子类(Integer、Long、Double 等)对象)可使用该转换器工厂类。
GenericConverter:会根据源类对象及目标类对象所在的宿主类中的上下文信息进行类型转换。
2)编写一个转换器,继承converter<s,t>
实体对象:
public class Employee{
private Integer id;
private String lastName;
private String email;
private Integer gender;
private Department department;
}
/**
转换器功能将一个 以 ‘-’分割的字符串,转换为 Employee对象, employee对象的属性
@Component
public class EmployeeConverter implements Converter<String, Employee> {
@Override
public Employee convert(String source) {
if(source != null){
String [] vals = source.split("-");
//GG-gg@atguigu.com-0-105
if(vals != null && vals.length == 4){
String lastName = vals[0];
String email = vals[1];
Integer gender = Integer.parseInt(vals[2]);
Department department = new Department();
department.setId(Integer.parseInt(vals[3]));
Employee employee = new Employee(null, lastName, email, gender, department);
return employee;
}
}
return null;
}
}
3)配置springMVC4
<bean id="conversionService"
class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<property name="converters">
<set>
<ref bean="employeeConverter"/> //通过@Component注解注入系统环境
</set>
</property>
</bean>
<mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>
4)配置JSP界面
input type=text name=employee value="GG-gg@atguigu.com-0-105"
input type="submit"
5)配置handler
//这个方法里 描述的是 将字符串 employee 转换为 Employee 对象, 系统会自动调用转换器
@RequestMapping("/conversionServiceConverer")
public void testConverter(@RequestParam("employee") Employee employee){
System.out.println( employee);
}
6)测试通过
如有疑问 请留言 欢迎提供建议
评论已有 0 条