数据转换&数据格式化&数据校验
Posted bigdatalearn
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据转换&数据格式化&数据校验相关的知识,希望对你有一定的参考价值。
1.数据绑定流程
① Spring MVC 主框架将 ServletRequest 对象及目标方法的入参实例传递给 WebDataBinderFactory 实例,以创建 DataBinder 实例对象
② DataBinder 调用装配在 Spring MVC 上下文中的 ConversionService 组件进行数据类型转换、数据格式化工作。将 Servlet 中的请求信息填充到入参对象中
③调用 Validator 组件对已经绑定了请求消息的入参对象进行数据合法性校验,并最终生成数据绑定结果 BindingData 对象
④Spring MVC 抽取 BindingResult 中的入参对象和校验错误对象,将它们赋给处理方法的响应入参
图解:
2.自定义类型转换器
步骤如下:
① 实现Converter<S,T>接口:将S类型对象转换成T类型对象
public class TestCon implements Converter<String, Employee> {
@Override
public Employee convert(String s) {
if(s != null){
String[] vals = s.split("-");
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;
}
}
②在SpringMVC配置文件中配置转换器
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<property name="converters">
<set>
<ref bean="testCon"/>
</set>
</property>
</bean>
③将自定义的ConversionService注册到Spring MVC的上下文中
<mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>
3.<mvc:annotation-driven />
<mvc:annotation-driven /> 会自动注册RequestMappingHandlerMapping 、RequestMappingHandlerAdapter 与 ExceptionHandlerExceptionResolver 三个bean。
还将提供以下支持:支持使用 ConversionService 实例对表单参数进行类型转换
支持使用 @NumberFormat annotation、@DateTimeFormat 注解完成数据类型的格式化
支持使用 @Valid 注解对 JavaBean 实例进行 JSR 303 验证
支持使用 @RequestBody 和 @ResponseBody 注解
从图中就能说明重要性
@InitBinder
由 @InitBinder 标识的方法,可以对 WebDataBinder 对象进行初始化。
WebDataBinder 是 DataBinder 的子类,用 于完成由表单字段到 JavaBean 属性的绑定 @InitBinder方法不能有返回值,它必须声明为void。
@InitBinder方法的参数通常是是 WebDataBinder
4.数据格式化使用步骤 ------------------------>主要针对数字类型、日期类型 比如
①在对应的bean对象中的属性上方加上注解就可以了 ------------------------------->就一步
原理:Spring在格式化模块中定义一个实现ConversionService接口的FormattingConversionService实现类,该类扩展了GenericConverisonService,因此它既具有类型转换的功能,又
具有格式化的功能。FormattingConversionService拥有FormattingConversionServiceFactotyBean工厂类,从而可以在Spring配置文件中注册构造FormattingConversionService。
所以转换器一般就直接配置
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean"></bean>
5.JSR303 数据校验
JSR 303 是 Java 为 Bean 数据合法性校验提供的标准框架,它已经包含在 JavaEE 6.0 中 .
JSR 303 通过在 Bean 属性上标注类似于 @NotNull、@Max 等标准的注解指定校验规则,并通过标准的验证接口对 Bean 进行验
步骤如下:
①加入jar包
②在需要数据校验的部分添加如下注解
③处理器部分,入参添加@valid注解
@RequestMapping(value = "/emp",method = RequestMethod.POST)
public String save(@Valid Employee employee, BindingResult result,Map<String,Object> map){
if(result.getErrorCount() > 0){
System.out.println("出错了");
for(FieldError error:result.getFieldErrors()){
System.out.println( error.getField() + ":" + error.getDefaultMessage());
}
//若验证出错则转向定制页面
map.put("departments", departmentDao.getDepartments());
return "input";
}
employeeDao.save(employee);
return "redirect:/emps";
}
以上是关于数据转换&数据格式化&数据校验的主要内容,如果未能解决你的问题,请参考以下文章
SpringMVC——类型转换和格式化数据校验客户端显示错误消息