綁定的機制
請求參數和控制器中方法的形參進行綁定。
形參支持的數據類型
基本類型參數:
包括基本類型和String類型
POJO類型參數:
包括實體類,以及關聯的實體類
數組和集合類型參數:
包括List結構和Map結構的集合(包括數組)
SpringMVC綁定請求參數是自動實現的,但是要想使用,必須遵循使用要求。
使用要求
如果是基本類型或者String類型:
要求我們的參數名稱必須和控制器中方法的形參名稱保持一致。(嚴格區分大小寫)
如果是POJO類型,或者它的關聯對象:
要求表單中參數名稱和POJO類的屬性名稱保持一致。並且控制器方法的參數類型是POJO類型。
如果是集合類型,有兩種方式:
第一種: 要求集合類型的請求參數必須在POJO中。在表單中請求參數名稱要和POJO中集合屬性名稱相同。 給List集合中的元素賦值,使用下標。 給Map集合中的元素賦值,使用鍵值對。
第二種: 接收的請求參數是json格式數據。需要藉助@RequsetBody
註解實現。具體可以參考這篇博客。
注意:
spring mvc 內置了很多數據類型轉換器,同時我們也可以自己自定義轉換器。內置的轉換器在org.springframework.core.convert.support包下。
基本類型和String類型作爲參數
jsp代碼:
<a href="${pageContext.request.contextPath}/test?username=zhangsan&age=1234">測試</a>
Controller代碼:
@RequestMapping("/test")
//形參和請求參數的名稱必須一樣,不然反射不到。
public String testMethod(String username,Integer age) {
System.out.println("username=" + username);
System.out.println("age=" + age);
return null;
}
輸出:
username=zhangsan
password=1234
POJO類型作爲參數
jsp代碼:
<a href="${pageContext.request.contextPath}/test?username=zhangsan&age=22">測試</a>
Controller代碼:
@RequestMapping("/test")
public String testMethod(User user) {
System.out.println(user);
return null;
}
實體類代碼:
public class User {
private String username;
private Integer age;
//getters and setters
}
輸出:
User{username='zhangsan', age=22}
POJO類中包含引用類型參數
jsp代碼:
<a href="${pageContext.request.contextPath}/test?account.money=200">測試</a>
Controller代碼:
@RequestMapping("/test")
public String testMethod(User user) {
System.out.println(user);
return null;
}
實體類代碼:
public class User {
private Account account;
//getters and setters
}
public class Account {
private Float money;
//getters and setters
}
輸出:
User{account=Account{money=200.0}}
POJO類中包含集合類型參數
jsp代碼:
<form action="${pageContext.request.contextPath}/test" method="post">
<input type="text" name="accountsList[0].money"/>
<input type="text" name="accountsMap['account1'].money"/>
<input type="submit" value="提交"/>
</form>
Controller代碼:
@RequestMapping("/test")
public String testMethod(User user) {
System.out.println(user);
return "springStart";
}
實體類代碼:
public class User {
private List<Account> accountsList;
private Map<String,Account> accountsMap;
//getters and setters
}
public class Account {
private Float money;
//getters and setters
}
輸出:
User{accountsList=[Account{money=300.0}], accountsMap={account1=Account{money=200.0}}}