springmvc数据绑定流程
1、数据绑定流程原理
1.1 Spring MVC 主框架将 ServletRequest 对象及目标方法的入参实例传递给 WebDataBinderFactory 实例,以创建 DataBinder 实例对象。
1.2 DataBinder 调用装配在 Spring MVC 上下文中的 ConversionService 组件进行数据类型转换、数据格式化工作。将 Servlet 中的请求信息填充到入参对象中。
1.3 调用 Validator 组件对已经绑定了请求消息的入参对象进行数据合法性校验,并最终生成数据绑定结果 BindingData 对象。
1.4 Spring MVC 抽取 BindingResult 中的入参对象和校验错误对象,将它们赋给处理方法的响应入参
2、自定义类型转换器
自定以类型转换器通过实现Converter<S,T> 接口的 convert(String source)方法来完成。
源码:
@Component(value="userConverter")
public class UserConverter implements Converter<String,User>{
/*
* 前端传来 xxx-xxx 格式的数据
* (non-Javadoc)
* @see org.springframework.core.convert.converter.Converter#convert(java.lang.Object)
*/
@Override
public User convert(String str) {
System.out.println("进入自定义User类型转化器");
if(str != null) {
System.out.println(str);
User user = new User();
String[] arr = str.split("-");
user.setUsername(arr[0]);
user.setPassword(arr[1]);
System.out.println("UserConverter:" + user);
return user;
}
return null;
}
}
将改转换器在springmvc配置文件中注册
<mvc:annotation-driven
conversion-service="conversionService" />
<bean id="conversionService"
class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<set>
<ref bean="userConverter" />
</set>
</property>
</bean>