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