一、請求參數綁定的類型
1、請求參數綁定基本類型
1.1、在頁面添加通路
<h3>2、基本類型資料綁定</h3>
<a href="/request/testBasicTypes?username=zhangsan&password=123" target="_blank" rel="external nofollow" >基本類型資料綁定</a><br/>
1.2、在處理器添加處理
/**
* 請求參數綁定:基本類型資料綁定
* @param username
* @param password
* @return
*/
@RequestMapping("/testBasicTypes")
public String testBasicTypes(String username,String password) {
System.out.println("使用者名:" + username + ",密碼:" + password);
return "success";
}
1.3、控制台輸出結果
2、請求參數綁定實體類型
2.1、建立實體類
package com.wedu.springmvc.domain;
import java.util.Date;
public class Userinfo {
private String username;
private String password;
private Date date;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
@Override
public String toString() {
return "Userinfo{" +
"username='" + username + '\'' +
", password='" + password + '\'' +
", date=" + date +
'}';
}
}
2.2、在頁面添加通路
<h3>2、JavaBean資料綁定</h3>
<form action="/request/testJavaBean" method="post">
使用者名:<input type="text" name="username"/>
密 碼:<input type="text" name="password"/>
<input type="submit" value="送出"/>
</form>
2.3、在處理器添加處理
/**
* 請求參數綁定:JavaBean資料綁定
* @param userinfo
* @return
*/
@RequestMapping("/testJavaBean")
public String testJavaBean(Userinfo userinfo) {
userinfo.setDate(new Date());
System.out.println(userinfo);
return "success";
}
2.4、控制台輸出結果
3、請求參數綁定集合類型
3.1、建立實體
package com.wedu.springmvc.domain;
import java.util.List;
import java.util.Map;
public class Account {
private List<Userinfo> list;
private Map<String,Userinfo> map;
public List<Userinfo> getList() {
return list;
}
public void setList(List<Userinfo> list) {
this.list = list;
}
public Map<String, Userinfo> getMap() {
return map;
}
public void setMap(Map<String, Userinfo> map) {
this.map = map;
}
@Override
public String toString() {
return "Account{" +
"list=" + list +
", map=" + map +
'}';
}
}
3.2、在頁面添加通路
<h3>3、集合類型資料綁定</h3>
<form action="/request/testConllection" method="post">
使用者名:<input type="text" name="list[0].username"/>
密 碼:<input type="text" name="list[0].password"/><br/>
使用者名:<input type="text" name="map['test'].username"/>
密 碼:<input type="text" name="map['test'].password"/>
<input type="submit" value="送出"/>
</form>
3.3、在處理器添加處理
/**
* 請求參數綁定:集合類型資料綁定
* @param account
* @return
*/
@RequestMapping("/testConllection")
public String testConllection(Account account) {
System.out.println(account);
return "success";
}
3.4、控制台輸出結果
二、請求參數綁定一些問題詳解
1、中文亂碼問題
原因:在表單送出時,浏覽器會對中文參數值進行編碼。伺服器段預設會使用iso-8859-1來解碼,如果表單的編碼方式和伺服器的不一緻,就會産生亂碼。
解決方式:在web.xml的配置檔案中添加中文亂碼過濾器
<!--配置解決中文亂碼的過濾器-->
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
2、類型轉換問題
在浏覽器發送的請求資料到伺服器時,有時因為伺服器接收的類型與浏覽器發送的類型不一緻,可能會導緻類型轉換問題,如時間,在浏覽器發送到伺服器時是字元串的格式,伺服器中接收資料的時候需要的是日期類型的。這時,我們可以自定義一個類型轉換器:
package com.wedu.springmvc.utils;
import org.springframework.core.convert.converter.Converter;
import org.springframework.lang.Nullable;
import sun.security.krb5.internal.PAData;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* 字元串轉換為日期類型工具類
*/
public class StringToDateConverter implements Converter<String,Date> {
@Nullable
@Override
public Date convert(String source) {
String pattern = null;
if(source == null) {
throw new RuntimeException("請您傳入資料");
} else if (source.contains(".")){
pattern = "yyyy.MM.dd";
}else if (source.contains("/")){
pattern = "yyyy/MM/dd";
}else if (source.contains("-")) {
pattern = "yyyy-MM-dd";
} else {
throw new RuntimeException("您傳入的資料格式不對,請重新輸入");
}
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
try {
return sdf.parse(source);
} catch (ParseException e) {
throw new RuntimeException("資料類型轉換出現錯誤");
}
}
}
然後在springmvc.xml中配置自定義類型轉換器
<!-- 配置自定義類型轉換器 -->
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<set>
<bean class="com.wedu.springmvc.utils.StringToDateConverter"/>
</set>
</property>
</bean>