Spring使用Converter轉(zhuǎn)換器進(jìn)行源類型對(duì)象到目標(biāo)類型對(duì)象的轉(zhuǎn)換。而Formatter完成任意類型對(duì)象(Object)與String之間的類型轉(zhuǎn)換央串,也即是格式化和解析磨澡。Formatter可以將String轉(zhuǎn)換成Java類型,例如用于表單中的用戶輸入质和。
ConversionService組件進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換稳摄、數(shù)據(jù)格式化工作。它是Spring類型轉(zhuǎn)換體系的核心接口侦另。ConversionServiceFactoryBean中可以內(nèi)置很多的類型轉(zhuǎn)換器秩命,如果需要自定義類型轉(zhuǎn)換器,可以在ConversionServiceFactoryBean中定義convertes屬性褒傅。
//class具體路徑部分有所省略
<bean id="conversionService" class=".ConversionServiceFactoryBean">
<property name="converters">
<list>
<bean class=".StringToDateConverter"/>
</list>
</property>
</bean>
在《Spring MVC中的信息轉(zhuǎn)換(學(xué)習(xí)筆記)》一文中弃锐,講到了HttpMessageConvert<T>是Spring3.0之后新增的一個(gè)重要接口,它負(fù)責(zé)將請(qǐng)求信息轉(zhuǎn)換為一個(gè)對(duì)象(類型為T(mén))殿托,并將對(duì)象綁定到請(qǐng)求方法的參數(shù)中或輸出為響應(yīng)信息霹菊。
??而MappingJackson2HttpMessageConverter(針對(duì)JSON的一種信息轉(zhuǎn)換器,實(shí)現(xiàn)了HttpMessageConvert接口)可以處理JSON格式的請(qǐng)求或者響應(yīng)信息支竹。
這里有講到Spring在org.springframework.core.convert.convert中定義了3種類型的轉(zhuǎn)換器接口:Converter
旋廷、ConverterFactory
、GenericConverter
礼搁。
此外饶碘,還可以使用@InitBinder添加自定義編輯器。
需要用一個(gè)類實(shí)現(xiàn)PropertyEditor接口馒吴,一般可以通過(guò)繼承PropertyEditorSupport扎运,然后再在Controller文件中通過(guò)注解來(lái)初始化注冊(cè)屬性編輯器瑟曲。
@InitBinder
public void InitBinder(WebDataBinder binder){
// 注冊(cè)自定義編輯器,其中DataEditor是自定義的編輯器類
inder.registerCustomEditor(Date.class,new DateEditor());
}
還有一種方法是使用WebBindingInitializer注冊(cè)全局自定義編輯器來(lái)轉(zhuǎn)換數(shù)據(jù)豪治。這時(shí)候的配置方法跟配置HttpMessageConverter有點(diǎn)像洞拨,是在AnnotationMethodHandlerAdapter
中進(jìn)行配置。
<!-- 通過(guò)AnnotationMethodHandlerAdapter裝配自定義編輯器 -->
<bean
class=".AnnotationMethodHandlerAdapter">
<property name="webBindingInitializer">
<bean class=".DateBindingInitializer" />
</property>
</bean>
多種轉(zhuǎn)換器的優(yōu)先順序
1负拟、查詢通過(guò)@InitBinder裝配的自定義編輯器烦衣。
2、查詢通過(guò)ConversionService裝配的自定義編輯器掩浙。
3花吟、查詢通過(guò)WebBindingInitializer接口裝配的全局自定義編輯器。