javascript
SpringMVC框架 |自定义类型转换器与日期格式化
文章目錄
- 一、Spring支持的轉(zhuǎn)換器
- 二、自定義轉(zhuǎn)換器的步驟
- 第一步:實現(xiàn)Converter接口
- 第二步:將Converter配置到ConverterService組件中
- 第三步:將組件聲明在annotation-driven標(biāo)簽中
- 三、關(guān)于annotation-driven標(biāo)簽
- 四、日期格式化
一、Spring支持的轉(zhuǎn)換器
Spring定義了3種類型的轉(zhuǎn)換器接口,實現(xiàn)任意一個轉(zhuǎn)換器接口都可以作為自定義轉(zhuǎn)換器注冊到ConversionServiceFactroyBean中:
- Converter<S,T>:將S類型對象轉(zhuǎn)為T類型對象。
- ConverterFactory:將相同系列多個同質(zhì)Converter封裝在一起。如果希望將一種類型的對象轉(zhuǎn)換為另一種類型及其子類的對象(例如將String轉(zhuǎn)換為Number及Number子類(Integer、Long、Double等)對象)可使用該轉(zhuǎn)換器工廠類。
- GenericConverter:會根據(jù)源類對象及目標(biāo)類對象所在的宿主類中的上下文信息進(jìn)行類型轉(zhuǎn)換.
由于后兩種形式并不常用,本文僅介紹第一種,實現(xiàn)Converter<S,T>接口的方法。
二、自定義轉(zhuǎn)換器的步驟
ConverterService是一個接口,它有一個實現(xiàn)類Converter(轉(zhuǎn)換器)進(jìn)行工作。自定義轉(zhuǎn)換器,步驟如下
- ①先實現(xiàn)Converter接口,寫一個自定義的類型轉(zhuǎn)換器。
- ②將Converter配置在ConverterService組件中。
- ③將組件聲明在annotation-driven標(biāo)簽中。
在頁面添加一個快速添加的按鈕
list.jsp
點擊發(fā)送/quickadd請求到handler處理器。
@RequestMapping("/quickadd")public String quickAdd(@RequestParam("empinfo") Employee employee) {System.out.println("封裝:" + employee);employDao.save(employee);return "redirect:/emps";}handler處理器中調(diào)用保存方法后發(fā)送/emps請求,進(jìn)而返回list.jsp頁面。
第一步:實現(xiàn)Converter接口
頁面提交的將要轉(zhuǎn)換的字符串為:empAdmin-admin@qq.com-1-101
- 自定的轉(zhuǎn)換器實現(xiàn)的功能:將String類型轉(zhuǎn)換為Employee對象。
第二步:將Converter配置到ConverterService組件中
- 將自定義的Converter實現(xiàn)類配置到ConverterService組件中。
后續(xù)為了與日期格式化兼容,通常使用下面的寫法:
<bean id="conversionService"class="org.springframework.format.support.FormattingConversionServiceFactoryBean"><!-- 添加自定義的類型轉(zhuǎn)換器 --><property name="converters"><set><bean class="com.gql.component.MyStringToEmployeeConverter"></bean></set></property></bean>第三步:將組件聲明在annotation-driven標(biāo)簽中
<mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>自定義轉(zhuǎn)換器設(shè)置完成,控制臺輸出:
頁面提交的將要轉(zhuǎn)換的字符串:empAdmin-admin@qq.com-1-101 封裝:Employee [id=null, lastName=empAdmin, email=admin@qq.com, gender=1, department=Department [id=101, departmentName=D-AA]]三、關(guān)于annotation-driven標(biāo)簽
-
<mvc:annotation-driven /"> 標(biāo)簽會自動注冊RequestMappingHandlerMapping、RequestMappingHandlerAdapter與ExceptionHandlerExceptionResolver三個bean。
-
支持使用ConverterService實例對表單參數(shù)進(jìn)行類型轉(zhuǎn)換。
-
支持使用@NumberFormat annotation、@DateTimeFormart注解完成數(shù)據(jù)類型的格式化。
-
支持使用@Valid注解對JavaBean實例進(jìn)行JSR303校驗。
-
支持使用@RequestBody和@ResponseBody注解。
四、日期格式化
對屬性對象的輸入和輸出進(jìn)行格式化,本質(zhì)上還是類型轉(zhuǎn)換的范疇。
Spring在格式化模塊中定義了一個實現(xiàn)ConverterService接口的FormattingConversionService實現(xiàn)類,該實現(xiàn)類擴(kuò)展了GenericConversionService,因此它即具有類型轉(zhuǎn)換的功能,又具有格式化的功能。
- FormattingConversionService擁有一個工廠類FormattingConversionServiceFactoryBean,后者用于在Spring上下文中構(gòu)造前者。
- FormattingConversionServiceFactoryBean內(nèi)部已經(jīng)注冊了
①NumberFormatAnnotationFormatterFactory:支持對數(shù)字類型的屬性使用@NumberFormat注解。
如:@NumberFormat(pattern="#,###,###")
②JodaDateTimeFormatAnnotationFormatterFactory:支持對日期類型的屬性使用@DateTimeFormat注解。
如:@DateTimeFormat(pattern = “yyyy-MM-dd”)
另外,需要注意的是ConversionServiceFactoryBean所創(chuàng)建的ConversionService組件沒有格式化器,使用時需要在SpringMVC配置中將其替換為FormattingConversionServiceFactoryBean組件。
總結(jié)
以上是生活随笔為你收集整理的SpringMVC框架 |自定义类型转换器与日期格式化的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大学教授郑强的经典语录
- 下一篇: iOS6和iOS7代码的适配(2)——s