SpringMVC-數據處理

數據綁定+轉換+驗證流程

數據從參數綁定到實體類的具體流程
MWU2@UU~{B3PRE1GILUE]4B.pngspring

進入invokeHanldeMethod()方法後的執行流程
5}[Y}6FVVUV}6UYQBB6IWS9.png
進入到了一個resolveArgument方法中進行參數合實體類的綁定
Y32Y[X(N@3WEMETQL~8MFOR.png
resolveArgument方法中會經過WebDataBinder生成一個數據綁定器對象(binder)經過this.bindRequestParameters()方法將請求參數綁定到實體類上,這就是爲何SpringMVC能夠直接使用實體類接收數據的原理。
9%XSH@[V]QAE4AV_]MG4M$V.png
這個數據綁定器裏面還包含着數據驗證器: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.從新啓動
轉換器生效
46A~%ZR3V[5@2)4HD9([Y[N.pngthis

DZYW8`R_H2@CILP[9)LGPYE.png
轉換器種類不少
VD@)66DPCVIKN21Q}44COGI.png
不一樣的轉換器會有不一樣的轉換功能
J%MZ0P}4TMW((%_4T$FOFID.pngspa

數據驗證

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

相關文章
相關標籤/搜索