詳解SpringMVC注解@initbinder解決類型轉(zhuǎn)換問題
在使用SpringMVC的時(shí)候,經(jīng)常會(huì)遇到表單中的日期字符串和JavaBean的Date類型的轉(zhuǎn)換,而SpringMVC默認(rèn)不支持這個(gè)格式的轉(zhuǎn)換,所以需要手動(dòng)配置,自定義數(shù)據(jù)的綁定才能解決這個(gè)問題。
在需要日期轉(zhuǎn)換的Controller中使用SpringMVC的注解@initbinder和Spring自帶的WebDateBinder類來操作。
WebDataBinder是用來綁定請(qǐng)求參數(shù)到指定的屬性編輯器.由于前臺(tái)傳到controller里的值是String類型的,當(dāng)往Model里Set這個(gè)值的時(shí)候,如果set的這個(gè)屬性是個(gè)對(duì)象,Spring就會(huì)去找到對(duì)應(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的配置文件加上
<!-- 解析器注冊(cè) -->
<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在綁定表單之前,都會(huì)先注冊(cè)這些編輯器,Spring自己提供了大量的實(shí)現(xiàn)類,諸如CustomDateEditor ,CustomBooleanEditor,CustomNumberEditor等許多,基本上夠用。
使用時(shí)候調(diào)用WebDataBinder的registerCustomEditor方法
registerCustomEditor源碼:
public void registerCustomEditor(Class<?> requiredType, PropertyEditor propertyEditor) {
getPropertyEditorRegistry().registerCustomEditor(requiredType, propertyEditor);
}
第一個(gè)參數(shù)requiredType是需要轉(zhuǎn)化的類型。
第二個(gè)參數(shù)PropertyEditor是屬性編輯器,它是個(gè)接口,以上提到的如CustomDateEditor等都是繼承了實(shí)現(xiàn)了這個(gè)接口的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();
}
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java字符串?dāng)?shù)字左右補(bǔ)全0的四種方式
這篇文章主要給大家介紹了關(guān)于Java字符串?dāng)?shù)字左右補(bǔ)全0的四種方式,在編程中有時(shí)候我們需要對(duì)一個(gè)字符串進(jìn)行字符填充,以滿足某些特定的要求,其中補(bǔ)全0是一種常見的需求,需要的朋友可以參考下2023-08-08
Spring Security保護(hù)用戶密碼常用方法詳解
這篇文章主要介紹了Spring Security保護(hù)用戶密碼常用方法詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09
springcloud如何用Redlock實(shí)現(xiàn)分布式鎖
本文主要介紹了springcloud如何用Redlock實(shí)現(xiàn)分布式鎖,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11
Spring Boot實(shí)現(xiàn)通用的接口參數(shù)校驗(yàn)
本文介紹基于 Spring Boot 和 JDK8 編寫一個(gè) AOP ,結(jié)合自定義注解實(shí)現(xiàn)通用的接口參數(shù)校驗(yàn)。具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-05-05
詳解spring cloud Feign使用中遇到的問題總結(jié)
本篇文章主要介紹了詳解spring cloud Feign使用中遇到的問題總結(jié),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-01-01
解決mybatis 數(shù)據(jù)庫(kù)date 與 java中Date類型映射問題
這篇文章主要介紹了解決mybatis 數(shù)據(jù)庫(kù)date 與 java中Date類型映射問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來吧2020-11-11
SpringBoot整合Minio實(shí)現(xiàn)文件上傳和讀取功能
最近有一個(gè)需求是關(guān)于視頻上傳播放的,需要設(shè)計(jì)一個(gè)方案,中間談到了Minio這個(gè)技術(shù),于是來學(xué)習(xí)一下,所以本文給大家介紹了SpringBoot整合Minio實(shí)現(xiàn)文件上傳和讀取功能,文中有詳細(xì)的代碼示例供大家參考,需要的朋友可以參考下2024-07-07

