普通類型傳參 當POJO中使用簡單類型屬性時, 參數名稱與POJO類屬性名保持一致 POJO類 public class User { private String name; private Integer age; public String getName() { return name; } ...
普通類型傳參
當POJO中使用簡單類型屬性時, 參數名稱與POJO類屬性名保持一致
POJO類
public class User {
private String name;
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
@RequestMapping("/requestParam1")
public String requestParam1(String name ,String age){
System.out.println("name="+name+",age="+age);
return "page.jsp";
}
http://localhost/requestParam1?name=itheima&age=14
**@RequestParam** 的使用 類型: 形參註解 位置:處理器類中的方法形參前方 作用:綁定請求參數與對應處理方法形參間的關係
//方法傳遞普通類型參數,使用@RequestParam參數匹配URL傳參中的參數名稱與方法形參名稱
//http://localhost/requestParam2?userName=Jock
@RequestMapping("/requestParam2")
public String requestParam2(@RequestParam(value = "userName",required = true) String name){
System.out.println(name);
return "page.jsp";
}
訪問http://localhost/requestParam2?userName=Jock
總結一下就是使得url中的請求參數與形參保持一致
POJO類型參數傳參
當POJO中使用簡單類型屬性時, 參數名稱與POJO類屬性名保持一致
1
POJO類
public class User {
private String name;
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
@RequestMapping("/requestParam3")
public String requestParam3(User user){
System.out.println("name="+user.getName());
return "page.jsp";
}
最終訪問http://localhost/requestParam3?name=itheima&age=14
方法傳遞POJO類型參數,URL地址中的參數作為POJO的屬性直接傳入對象
**參數衝突**
當POJO類型屬性與其他形參出現同名問題時,將被同時賦值
建議使用@RequestParam註解進行區分
2
Controller
//當方法參數中具有POJO類型參數與普通類型參數嘶,URL地址傳入的參數不僅給POJO對象屬性賦值,也給方法的普通類型參數賦值
@RequestMapping("/requestParam4")
public String requestParam4(User user,int age){
System.out.println("user="+user+",age="+age);
return "page.jsp";
}
最終訪問//http://localhost/requestParam4?name=Jock&age=39
複雜POJO類型參數
3
當POJO中出現對象屬性時,參數名稱與對象層次結構名稱保持一致
POJO
public class User {
private String name;
private Integer age;
private Address address;
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
Controller
使用對象屬性名.屬性名的對象層次結構可以為POJO中的POJO類型參數屬性賦值
@RequestMapping("/requestParam5")
public String requestParam5(User user){
System.out.println(user.getAddress().getCity());
return "page.jsp";
}
訪問//http://localhost/requestParam5?address.city=beijing
一層套一層
4 當POJO中出現List,保存對象數據,參數名稱與對象層次結構名稱保持一致,使用數組格式描述集合中對象的位置
POJO
public class User {
private String name;
private Integer age;
private List<Address> addresses;
}
public class Address {
private String province;
private String city;
private String address;
}
Controller
POJO中List對象保存POJO的對象屬性賦值,使用[數字]的格式指定為集合中第幾個對象的屬性賦值
@RequestMapping("/requestParam6")
public String requestParam6(User user){
System.out.println(user);
return "page.jsp";
}
訪問//http://localhost/requestParam7?addresses[0].city=beijing&addresses[1].province=hebei
5 **當POJO中出現Map,保存對象數據,參數名稱與對象層次結構名稱保持一致,使用映射格式描述集合中對象的位置**
POJO
public class User {
private String name;
private Integer age;
private Map<String,Address> addressMap;
}
public class Address {
private String province;
private String city;
private String address;
}
Controller
POJO中Map對象保存POJO的對象屬性賦值,使用[key]的格式指定為Map中的對象屬性賦值
@RequestMapping("/requestParam8")
public String requestParam8(User user){
System.out.println(user.getAddressMap());
return "page.jsp";
}
http://localhost/requestParam8?addressMap['job'].city=beijing&addressMap['home'].province=henan
數組與集合類型參數傳參
數組類型參數
請求參數名與處理器方法形參名保持一致,且請求參數數量> 1個
訪問URL: http://localhost/requestParam9?nick=Jockme&nick=zahc
@RequestMapping("/requestParam9")
public String requestParam9(String[] nick){
System.out.println(nick[0]+","+nick[1]);
return "page.jsp";
}
集合類型參數
保存簡單類型數據,請求參數名與處理器方法形參名保持一致,且請求參數數量> 1個
訪問URL: http://localhost/requestParam10?nick=Jockme&nick=zahc
@RequestMapping("/requestParam10")
public String requestParam10(@RequestParam("nick") List<String> nick){
System.out.println(nick);
return "page.jsp";
}
註意: SpringMVC預設將List作為對象處理,賦值前先創建對象,然後將nick作為對象的屬性進行處理。由於
List是介面,無法創建對象,報無法找到構造方法異常;修複類型為可創建對象的ArrayList類型後,對象可
以創建,但沒有nick屬性,因此數據為空。此時需要告知SpringMVC的處理器nick是一組數據,而不是一個單
一數據。通過@RequestParam註解,將數量大於1個names參數打包成參數數組後, SpringMVC才能識別該數
據格式,並判定形參類型是否為數組或集合,並按數組或集合對象的形式操作數據。