数据绑定+转换+验证流程
数据从参数绑定到实体类的具体流程
进入invokeHanldeMethod()方法后的执行流程
进入到了一个resolveArgument方法中进行参数合实体类的绑定
resolveArgument方法中会通过WebDataBinder生成一个数据绑定器对象(binder)通过this.bindRequestParameters()方法将请求参数绑定到实体类上,这就是为什么SpringMVC可以直接使用实体类接收数据的原理。
这个数据绑定器里面还包含着数据验证器:validators负责数据校验工作和数据转换器ConversionService组件:负责数据类型的转换以及格式化功能。
自定义数据转换器
1.配置SpringMVC.xml文件
<mvc:default-servlet-handler></mvc:default-servlet-handler>
<!-- 让SpringMVC使用我们自己配置的转换器 -->
<mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<set>
<bean class="com.lyh.component.MyConverterTest"></bean>
</set>
</property>
</bean
2.编写数据转换器
package com.lyh.component;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.convert.converter.Converter;
import com.lyh.bean.User;
import com.lyh.dao.UserDao;
public class MyConverterTest implements Converter<String, User> {
@Autowired
UserDao userDao;
@Override
public User convert(String source) {
User user=new User();
if (source.contains("@")) {
String[] split = source.split("@");
user.setUsername(split[0]);
user.setEmail(split[1]);
userDao.save(user);
}
return user;
}
}
3.重新启动
转换器生效
转换器种类很多
不同的转换器会有不同的转换功能
数据验证
Spring MVC中数据验证可以直接使用JSR303完成,只需要在实体类属性上添加注解然后在入参时添加@Vaild注解即可进行数据验证,用BindeingResult可以将错误信息取出,然后放到Model域中发送给前段界面。
@Email
public String emaile;
@RequestMapping("/addUser")
public String addUser(@Vaile User user,BindingResult result)
{
Boolean result=result.hasErrors();
List<FieldError> errors = result.getFieldErrors();
if(result)
{
model.addAttribute("errorVaild",errors.getDefaultMessage());
}
else
{
userDao.saveUser(user);
return "success";
}
}
${errorVaild} <!--取出错误信息-->
<form>
用户名:
<input type="text" name="username">
密码:
<input type="password" name="password">
个人邮件:
<input type="text" name="email">
</form>
JSR303细节看易学教程:https://www.e-learn.cn/topic/...
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。