springmvc的類型轉換器converter


這個convter類型轉換是器做什么用的?

他是做類型轉換的,或者數據格式化處理。可以把數據在送到controller之前做處理。變成你想要的格式或者類型。方便我們更好的使用。

比如說你從前台傳過來一個日期,它的格式不是你想要的,這時你就可以自定義一個controller轉換器,幫你做日期格式化這件事。就像我們以前,

寫的工具類一樣,只不過,springmvc給我們提供了這種功能,在更方便我們使用。在需要時自動幫我們做這件事了。接下來看看它是怎樣實現的?


 

這里演示把一個string字符串轉換成一個對象。格式話就更簡單了。根據你的想象大膽的設計它,幫你更好的完成工作。


 

首先我們來定義目標類,目標類就是要轉換成該類型的對象。

定義一個bean,MyPhone,他有倆屬性areaCode(區號),phoneNum(電話號碼),給他們getter和setter方法。ok,這個bean定義好了。

 


 

接下來定義一個中轉模型,這個模型就是做數據類型轉換或者是數據格式化的中轉。定義一個modelBean,UserModel,把目標類的對象MyPhone給他,給他getter

和setter方法,ok,這個bean定義好了。

 


 

下面是核心,自定義,轉換器。要完成這樣一個操作我們要使用springmvc給我們提供的一個接口,Converter,我們要實現這個接口並且給他一個泛型,

Converter<被轉換類型,轉換成的類型>,然后按你的構思實現他的方法convert,去讓他幫你完成你想要干的事。

 

/**
* @目標類型作為模型類的屬性,我們前面定義好了。
* @這里將完成把String型數據轉為目標類型的操作
* @轉換器關鍵代碼 實現String轉MyPhone @如010-234234324 轉為MyPhone
*/
public class MyConverter implements Converter<String, MyPhone> {
@Override
public MyPhone convert(String source) {
System.out.println("轉換了沒?");
MyPhone phone = new MyPhone();
//將字符串按照某種規則拆分成字符串數組
String[] strArr = source.split("-");
String areaCode = strArr[0];
String phoneNum = strArr[1];
phone.setAreaCode(areaCode);
phone.setPhoneNum(phoneNum);
return phone;
}
// 參數是源類型(要轉換的字符串),返回的是目標類型
}

 


 

這是controller的寫法,這里說一下中轉模型吧,它的屬性名是觸發類型轉換的關鍵。你想要轉換就拿這個模型作為controller的入參就OK了。

 

@Controller
@RequestMapping("/xx")
public class Example4Controller {
@RequestMapping("/example")
public String toSuccessPage(UserModel user, Model model) {
System.out.println("阿呆的掛念");
model.addAttribute("user", user);
return "example4";
}
}

 

 


 

最后一步,在spirngmvc.xml中注冊轉換器。springmvc的ConversionServiceFactoryBean類會幫我們把轉換器,在HandlerMapping組件將url分配給controller之前執行轉換器。

 

<!-- springmvc注解驅動標簽,引入轉換器 -->
<mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>
<!--  注冊轉換器,並注入自定義的轉換器 -->
<bean id="conversionService"
class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<list>
<bean class="com.xxx.util.MyConverter" />
</list>
</property>
</bean>

 


 

 ok這樣一個流程寫完你可以用了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM