天天看點

Springmvc之類型轉換器Springmvc之類型轉換器

Springmvc之類型轉換器

一、概述

在我們寫的程式中,表單送出的無論是 int 還是 double 類型的請求參數,用于處理該請求

的處理器方法的形參,均可直接接收到相應類型的相應資料,而非接收到 String 再手工轉換。

那是因為在 SpringMVC 架構中,有預設的類型轉換器。這些預設的類型轉換器,可以将 String

類型的資料,自動轉換為相應類型的資料。

但預設類型轉換器并不是可以将使用者送出的 String,轉換為所有使用者需要的類型。此時,

就需要自定義類型轉換器了。 

  例如,在 SpringMVC 的預設類型轉換器中,沒有日期類型的轉換器,因為日期的格式太

多。若要使表單中送出的日期字元串,被處理器方法形參直接接收為 java.util.Date,則需要

自定義類型轉換器了。 

二、轉換示例

(1)寫index頁面

Springmvc之類型轉換器Springmvc之類型轉換器

(2)修改處理器類

Springmvc之類型轉換器Springmvc之類型轉換器

(3)修改SpringMVC配置檔案

Springmvc之類型轉換器Springmvc之類型轉換器

(4)自定義類型轉換器

若要定義類型轉換器,則需要實作 Converter 接口。該 Converter 接口有兩個泛型:第一

個為待轉換的類型,第二個為目标類型。而該接口的方法 convert(),用于完成類型轉換。

Springmvc之類型轉換器Springmvc之類型轉換器

(5)對類型轉換器的配置

 類型轉換器定義完畢後,需要在 SpringMVC 的配置檔案中對類型轉換進行配置。首先要

注冊類型轉換器,然後再注冊一個轉換服務 Bean。将類型轉換器注入給該轉換服務 Bean。

最後由處理器擴充卡來使用該轉換服務 Bean。 

1,注冊類型轉換器

Springmvc之類型轉換器Springmvc之類型轉換器

2,建立轉換服務Bean

對于類型轉換器,并不是直接使用,而是通過轉換服務 Bean 來調用類型轉換器。而轉

換服務 Bean 的建立,是由轉換服務工廠 Bean -- ConversionServiceFactoryBean 完成。 

  該工廠 Bean 有一個 Set 集合屬性 converters,用于指定該轉換服務可以完成的轉換,即

可以使用的轉換器。從 Set 集合可知,各轉換器間無先後順序。 

Springmvc之類型轉換器Springmvc之類型轉換器

3,使用轉換服務Bean

轉換服務 Bean 是由處理器擴充卡直接調用的。采用 mvc 的注解驅動注冊方式,可以将

轉換服務直接注入給處理器擴充卡。 

Springmvc之類型轉換器Springmvc之類型轉換器

4,SpringMVC配置檔案的總配置

Springmvc之類型轉換器Springmvc之類型轉換器

三、資料回顯

3.1 概述

        當資料類型轉換發生異常後,需要傳回到表單頁面,讓使用者重新填寫。但正常情況下, 發生類型轉換異常,系統會自動跳轉到 400 頁面。是以,若要在發生類型轉換異常後,跳轉 到指定頁面,則需要将異常捕獲,然後通過異常處理器跳轉到指定頁面。  

        若僅僅是完成跳轉,則使用系統定義好的 SimpleMappingExceptionResolver 就可以。但, 當頁面傳回到表單頁面後,還需要将使用者原來填寫的資料顯示出來,讓使用者更正填錯的資料。 也就是還需要完成資料回顯功能。此時就需要自定義異常處理器了。 

(1)類型轉換異常為 TypeMismatchException。 

資料回顯原理:在異常處理器中,通過 request.getParameter()将使用者輸入的表單原始數 據擷取到後,直接放入到 ModelAndView 中的 Model 中,然後從要轉向的頁面中就可以直接 通過 EL 表達式讀取出,也就實作了資料回顯。 

Springmvc之類型轉換器Springmvc之類型轉換器
Springmvc之類型轉換器Springmvc之類型轉換器
Springmvc之類型轉換器Springmvc之類型轉換器

(2)修改類型轉換器

Springmvc之類型轉換器Springmvc之類型轉換器

(3)修改表單頁面

Springmvc之類型轉換器Springmvc之類型轉換器

繼續閱讀