詳解SpringMVC注解@initbinder解決類型轉(zhuǎn)換問題
在使用SpringMVC的時候,經(jīng)常會遇到表單中的日期字符串和JavaBean的Date類型的轉(zhuǎn)換,而SpringMVC默認(rèn)不支持這個格式的轉(zhuǎn)換,所以需要手動配置,自定義數(shù)據(jù)的綁定才能解決這個問題。
在需要日期轉(zhuǎn)換的Controller中使用SpringMVC的注解@initbinder和Spring自帶的WebDateBinder類來操作。
WebDataBinder是用來綁定請求參數(shù)到指定的屬性編輯器.由于前臺傳到controller里的值是String類型的,當(dāng)往Model里Set這個值的時候,如果set的這個屬性是個對象,Spring就會去找到對應(yīng)的editor進(jìn)行轉(zhuǎn)換,然后再SET進(jìn)去。
代碼如下:
@InitBinder
public void initBinder(WebDataBinder binder) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
dateFormat.setLenient(false);
binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));
}
需要在SpringMVC的配置文件加上
<!-- 解析器注冊 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<property name="messageConverters">
<list>
<ref bean="stringHttpMessageConverter"/>
</list>
</property>
</bean>
<!-- String類型解析器,允許直接返回String類型的消息 -->
<bean id="stringHttpMessageConverter" class="org.springframework.http.converter.StringHttpMessageConverter"/>
換種寫法
<mvc:annotation-driven>
<mvc:message-converters>
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<constructor-arg value="UTF-8"/>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
拓展:
spring mvc在綁定表單之前,都會先注冊這些編輯器,Spring自己提供了大量的實現(xiàn)類,諸如CustomDateEditor ,CustomBooleanEditor,CustomNumberEditor等許多,基本上夠用。
使用時候調(diào)用WebDataBinder的registerCustomEditor方法
registerCustomEditor源碼:
public void registerCustomEditor(Class<?> requiredType, PropertyEditor propertyEditor) {
getPropertyEditorRegistry().registerCustomEditor(requiredType, propertyEditor);
}
第一個參數(shù)requiredType是需要轉(zhuǎn)化的類型。
第二個參數(shù)PropertyEditor是屬性編輯器,它是個接口,以上提到的如CustomDateEditor等都是繼承了實現(xiàn)了這個接口的PropertyEditorSupport類。
我們也可以不使用他們自帶的這些編輯器類。
我們可以自己構(gòu)造:
import org.springframework.beans.propertyeditors.PropertiesEditor;
public class DoubleEditor extends PropertyEditorSupport {
@Override
public void setAsText(String text) throws IllegalArgumentException {
if (text == null || text.equals("")) {
text = "0";
}
setValue(Double.parseDouble(text));
}
@Override
public String getAsText() {
return getValue().toString();
}
}
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
深入解析Jdk8中Stream流的使用讓你脫離for循環(huán)
這篇文章主要介紹了Jdk8中Stream流的使用,讓你脫離for循環(huán),本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2020-02-02
Spring Cloud Alibaba配置多環(huán)境管理詳解與實戰(zhàn)代碼
本文通過實際案例詳細(xì)介紹了springboot配置多環(huán)境管理的使用,以及基于nacos的配置多環(huán)境管理的實踐,在實際開發(fā)中,配置多環(huán)境管理是一個很難避開的問題,同時也是微服務(wù)治理中一個很重要的內(nèi)容,感興趣的朋友跟隨小編一起看看吧2024-06-06
Java數(shù)據(jù)導(dǎo)入功能之讀取Excel文件實例
這篇文章主要介紹了Java數(shù)據(jù)導(dǎo)入功能之讀取Excel文件實例,本文給出了jar包的下載地址以及讀取Excel文件的代碼實例,需要的朋友可以參考下2015-06-06
Java結(jié)合redis實現(xiàn)接口防重復(fù)提交
本文主要介紹了Java結(jié)合redis實現(xiàn)接口防重復(fù)提交,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-09-09
Java 實戰(zhàn)項目錘煉之樸素風(fēng)格個人博客系統(tǒng)的實現(xiàn)流程
讀萬卷書不如行萬里路,只學(xué)書上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用Java+vue+Springboot+ssm+mysql+maven+redis實現(xiàn)一個樸素風(fēng)格的個人博客系統(tǒng),大家可以在過程中查缺補(bǔ)漏,提升水平2021-11-11
SpringBoot集成SQL?Server的詳細(xì)指南
SQL?Server是由Microsoft開發(fā)和推廣的以客戶/服務(wù)器(c/s)模式訪問、使用Transact-SQL語言的關(guān)系數(shù)據(jù)庫管理系統(tǒng)(DBMS),本文給大家介紹了Spring?Boot集成SQL?Server的詳細(xì)指南,需要的朋友可以參考下2024-11-11

