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)致傳值不能成功,此時(shí),需要進(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類型,此時(shí),就不會綁定成功,請求相應(yīng)的controller會出現(xiàn)如下錯誤:

因此我們需要進(jìn)行參數(shù)綁定。
參數(shù)綁定主要包括兩步:
1. 新建一個(gè)類實(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)文章
SpringBoot下使用定時(shí)任務(wù)的方式全揭秘(6種)
這篇文章主要介紹了SpringBoot下使用定時(shí)任務(wù)的方式全揭秘(6種),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-02-02
SpringBoot+Vue+JWT的前后端分離登錄認(rèn)證詳細(xì)步驟
這篇文章主要介紹了SpringBoot+Vue+JWT的前后端分離登錄認(rèn)證,其實(shí)創(chuàng)建后端springboot工程也很簡單,本文安裝idea步驟一步步給大家詳細(xì)介紹,需要的朋友可以參考下2021-09-09
通過idea創(chuàng)建Spring Boot項(xiàng)目并配置啟動過程圖解
這篇文章主要介紹了通過idea創(chuàng)建Spring Boot項(xiàng)目并配置啟動過程圖解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11
Java面向?qū)ο髮?shí)現(xiàn)汽車租賃系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了Java面向?qū)ο髮?shí)現(xiàn)汽車租賃系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02
Java使用Lettuce客戶端在Redis在主從復(fù)制模式下命令執(zhí)行的操作
這篇文章主要介紹了Java使用Lettuce客戶端在Redis在主從復(fù)制模式下命令執(zhí)行的操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-04-04

