SpringMVC 參數(shù)綁定意義及實(shí)現(xiàn)過程解析
參數(shù)綁定的定義
所謂參數(shù)綁定,簡單來說就是客戶端發(fā)送請求,而請求中包含一些數(shù)據(jù),那么這些數(shù)據(jù)怎么到達(dá) Controller。從客戶端請求key/value數(shù)據(jù)(比如get請求中包含的數(shù)據(jù)),經(jīng)過參數(shù)綁定,將key/value數(shù)據(jù)綁定到controller方法的形參上。springmvc中,接收頁面提交的數(shù)據(jù)是通過方法形參來接收。而不是在controller類定義成員變量接收。
SpringMVC中默認(rèn)支持的類型
自定義參數(shù)類型進(jìn)行綁定
對于有些參數(shù)類型,由于我們輸入的參數(shù)的類型與實(shí)體類中的參數(shù)類型不同,因此導(dǎo)致傳值不能成功,此時,需要進(jìn)行參數(shù)類型綁定。下面以Date類型為例介紹怎樣進(jìn)行自定義參數(shù)類型綁定。
User.java
import java.util.Date; public class User { private Integer id; private String username; private String sex; private Date birthday; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username == null ? null : username.trim(); } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex == null ? null : sex.trim(); } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } }
JSP頁面:注意輸入框的 name 屬性值和上面 POJO 實(shí)體類的屬性保持一致即可映射成功。
<form action="pojo" method="post"> 用戶id:<input type="text" name="id" value="2"></br> 用戶名:<input type="text" name="username" value="Marry"></br> 性別:<input type="text" name="sex" value="女"></br> 出生日期:<input type="text" name="birthday" value="2017-08-25"></br> <input type="submit" value="提交"> </form>
因?yàn)槲覀冚斎氲腷irthday是String類型,但是實(shí)體類中的birthday是Date類型,此時,就不會綁定成功,請求相應(yīng)的controller會出現(xiàn)如下錯誤:
因此我們需要進(jìn)行參數(shù)綁定。
參數(shù)綁定主要包括兩步:
1. 新建一個類實(shí)現(xiàn)Converter接口
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import org.springframework.core.convert.converter.Converter; //需要實(shí)現(xiàn)Converter接口,這里是將String類型轉(zhuǎn)換成Date類型 public class DateConverter implements Converter<String, Date> { @Override public Date convert(String source) { //實(shí)現(xiàn)將字符串轉(zhuǎn)成日期類型(格式是yyyy-MM-dd HH:mm:ss) SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); try { return dateFormat.parse(source); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } //如果參數(shù)綁定失敗返回null return null; } }
2. 在配置文件中進(jìn)行配置
<mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven> <bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean"> <property name="converters"> <!-- 自定義轉(zhuǎn)換器的類名 --> <bean class="com.ys.util.DateConverter"></bean> </property> </bean>
這樣就完成了自定義參數(shù)類型的綁定。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
jenkins按模塊進(jìn)行構(gòu)建遇到的問題及解決方案
這篇文章主要介紹了jenkins按模塊進(jìn)行構(gòu)建的問題及解決方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05BeanUtils.copyProperties復(fù)制對象結(jié)果為空的原因分析
這篇文章主要介紹了BeanUtils.copyProperties復(fù)制對象結(jié)果為空的原因分析,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-06-06SpringBoot+Redis執(zhí)行l(wèi)ua腳本的5種方式總結(jié)
Lua是一種快速、輕量級的腳本語言,廣泛應(yīng)用于各種領(lǐng)域,包括數(shù)據(jù)庫,Redis作為一個內(nèi)嵌Lua解釋器的NoSQL數(shù)據(jù)庫,允許通過Lua腳本在服務(wù)器端執(zhí)行一些復(fù)雜的操作,本文給大家介紹了使用SpringBoot Redis執(zhí)行l(wèi)ua腳本的五種方式,需要的朋友可以參考下2023-11-11java短信驗(yàn)證碼獲取次數(shù)限制實(shí)例
這篇文章主要介紹了java短信驗(yàn)證碼獲取次數(shù)限制實(shí)例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-01-01SpringBoot集成Redis實(shí)現(xiàn)驗(yàn)證碼的簡單案例
本文主要介紹了SpringBoot集成Redis實(shí)現(xiàn)驗(yàn)證碼的簡單案例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08