數據從參數綁定到實體類的具體流程spring
進入invokeHanldeMethod()方法後的執行流程
進入到了一個resolveArgument方法中進行參數合實體類的綁定
resolveArgument方法中會經過WebDataBinder生成一個數據綁定器對象(binder)經過this.bindRequestParameters()方法將請求參數綁定到實體類上,這就是爲何SpringMVC能夠直接使用實體類接收數據的原理。
這個數據綁定器裏面還包含着數據驗證器:validators負責數據校驗工做和數據轉換器ConversionService組件:負責數據類型的轉換以及格式化功能。mvc
1.配置SpringMVC.xml文件app
<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.編寫數據轉換器ide
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.從新啓動
轉換器生效this
轉換器種類不少
不一樣的轉換器會有不一樣的轉換功能spa
Spring MVC中數據驗證能夠直接使用JSR303完成,只須要在實體類屬性上添加註解而後在入參時添加@Vaild註解便可進行數據驗證,用BindeingResult能夠將錯誤信息取出,而後放到Model域中發送給前段界面。3d
@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/...code