Spring MVC框架:第十三章:類型轉(zhuǎn)換

SpringMVC將“把請(qǐng)求參數(shù)注入到POJO對(duì)象”這個(gè)操作稱為“數(shù)據(jù)綁定”。
數(shù)據(jù)類型的轉(zhuǎn)換和格式化就發(fā)生在數(shù)據(jù)綁定的過(guò)程中。
類型轉(zhuǎn)換和格式化是密不可分的兩個(gè)過(guò)程,很多帶格式的數(shù)據(jù)必須明確指定格式之后才可以進(jìn)行類型轉(zhuǎn)換。
最典型的就是日期類型。

1.使用SpringMVC內(nèi)置的類型轉(zhuǎn)換器
①配置MVC注解驅(qū)動(dòng)

<mvc:annotation-driven/>


②在需要進(jìn)行轉(zhuǎn)換的字段上標(biāo)記特定的注解

@DateTimeFormat(pattern="yyyy-MM-dd")
private Date birthday;
@NumberFormat(pattern="#,###,###.#")
private double salary;


2.轉(zhuǎn)換失敗后處理
①BindingResult

SpringMVC在捕獲到類型轉(zhuǎn)換失敗錯(cuò)誤時(shí)會(huì)將相關(guān)信息封裝到BindingResult對(duì)象傳入到目標(biāo)handler方法中。

//Return if there were any errors.
boolean hasErrors();


在handler可以通過(guò)hasErrors()方法判斷是否有錯(cuò)誤。如果有則跳轉(zhuǎn)到指定的頁(yè)面。當(dāng)然如果有需要也可以獲取其他相關(guān)信息。

使用BindingResult檢測(cè)綁定失敗錯(cuò)誤

@RequestMapping("/convert")
public String convertFail(Employee employee, BindingResult bindingResult) {       
    //檢測(cè)是否存在“數(shù)據(jù)綁定”錯(cuò)誤
    boolean hasErrors = bindingResult.hasErrors();
    if(hasErrors) {           
        return "error";           
    }       
    System.out.println(employee);       
    return "target";
}

  
※千萬(wàn)注意:這里傳入Employee和BindingResult這兩個(gè)參數(shù)時(shí)中間不能有別的入?yún)⒙暶鳌?br>②頁(yè)面顯示

[1]要借助SpringMVC的form:form標(biāo)簽

[2]在form:form標(biāo)簽中要明確指定modelAttribute屬性。

[3]使用form:errors標(biāo)簽,通過(guò)path屬性指定要顯示錯(cuò)誤消息的屬性名

在頁(yè)面上結(jié)合SpringMVC的表單標(biāo)簽顯示錯(cuò)誤消息

<form:form modelAttribute="employee">
    <form:input path="age"/><form:errors path="age"/>
</form:form>


自動(dòng)的類型轉(zhuǎn)換
?HTTP協(xié)議本身是無(wú)類型的,請(qǐng)求體、響應(yīng)體傳輸?shù)臄?shù)據(jù)都是字符串。
?String ageFromRequest = request.getParameter(“age”)
?SpringMVC框架為了幫助我們簡(jiǎn)化開(kāi)發(fā)在底層為我們實(shí)現(xiàn)了自動(dòng)的類型轉(zhuǎn)換
@RequestParam(“age”) Integer ageFromAnnotaion
使用想要的類型接收即可
※當(dāng)然,如果轉(zhuǎn)換失敗,也會(huì)返回錯(cuò)誤頁(yè)面400

3.自定義類型轉(zhuǎn)換器
①Converter<S,T>接口

自定義類型轉(zhuǎn)換器要實(shí)現(xiàn)Converter<S,T>這個(gè)接口
②配置FormattingConversionServiceFactoryBean

在FormattingConversionServiceFactoryBean的converters屬性中配置自定義類型轉(zhuǎn)換器的全類名

<bean id="conversionServiceFactoryBean" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
    <property name="converters">
        <set>
            <bean class="com.mvc.converters.EmpConverter"/>
        </set>
    </property>
</bean>


③配置mvc:annotation-driven

<mvc:annotation-driven conversion-service="conversionServiceFactoryBean"/>