(一)SpringMVC Controller接受參數的方式
(1) 前端傳遞的參數,在springMVC的controller中使用基本數據類型或者String 類型進行接受
在前端有一個form表單,需要傳遞姓名和年齡,在controller可以采用基本數據類型或者String進行接受,
<form action="demo" method="post"> 名字:<input type="text" name="name"/><br/> 年齡:<input type="text" name="age"/><br/> <input type="submit" value="提交"/><br/> </form>
此時值需要接受參數的名稱和傳遞的參數名稱一致就行
fun01(String name,int age)
@Controller public class DemoController { @RequestMapping("/demo") public String fun01(String name,int age) {//字符串的返回值代表代表要跳轉的頁面 System.out.println(name); System.out.println(age); System.out.println("指定了demo"); //返回值最好寫全路徑,全路徑就是以"/"開頭的路徑,否則就是相對路徑, //相對路徑就是以相對當前方法的映射路徑,例如如果返回值是"main.jsp",是相對路徑,最后的絕對路徑是 //"demo/main.jsp" return "/main.jsp"; } }
(2) 前端傳遞的參數,在springMVC的controller中使用 類類型進行接受(走get/set方法)
此時需要 類類型的屬性名稱與前端傳遞參數的參數名稱一致
@Controller public class DemoController { @RequestMapping("/demo") public String fun01(People peo) {//字符串的返回值代表代表要跳轉的頁面 System.out.println(peo.getName()); System.out.println(peo.getAge()); System.out.println("指定了demo"); //返回值最好寫全路徑,全路徑就是以"/"開頭的路徑,否則就是相對路徑, //相對路徑就是以相對當前方法的映射路徑,例如如果返回值是"main.jsp",是相對路徑,最后的絕對路徑是 //"demo/main.jsp" return "/main.jsp"; } }
(3) 前端傳遞的參數,在springMVC的controller中使用HttpServletRequest進行接受
@Controller public class DemoController { @RequestMapping("/demo") public String fun01(HttpServletRequest req) {//字符串的返回值代表代表要跳轉的頁面 System.out.println("指定了demo"); //返回值最好寫全路徑,全路徑就是以"/"開頭的路徑,否則就是相對路徑, //相對路徑就是以相對當前方法的映射路徑,例如如果返回值是"main.jsp",是相對路徑,最后的絕對路徑是 //"demo/main.jsp" System.out.println(req.getParameter("name")); System.out.println(req.getParameter("age")); return "/main.jsp"; } }
(4) 前端傳遞的參數,在springMVC的controller中 同時使用上述三中方法進行接受
@Controller public class DemoController { @RequestMapping("/demo") public String fun01(People peo, String name,int age,HttpServletRequest req) {//字符串的返回值代表代表要跳轉的頁面 System.out.println(name); System.out.println(age); System.out.println(peo.getName()); System.out.println(peo.getAge()); System.out.println("指定了demo"); //返回值最好寫全路徑,全路徑就是以"/"開頭的路徑,否則就是相對路徑, //相對路徑就是以相對當前方法的映射路徑,例如如果返回值是"main.jsp",是相對路徑,最后的絕對路徑是 //"demo/main.jsp" System.out.println(req.getParameter("name")); System.out.println(req.getParameter("age")); return "/main.jsp"; } }
(二)@RequestParam()注解
(1) 如果請求參數名和方法參數名不對,使用value屬性
@RequestMapping("demo") public String demo(@RequestParam(value="name1") String name,@RequestParam(value="age1")int age) { System.out.println("執行 demo"+" "+name+""+age); return "main.jsp"; }
(2)如果接受參數是基本類型,且接受參數類型與null無法進行兼容,此時可以采用包裝類型或者采用默認值,使用defaultValue屬性
@RequestMapping("page") public String page(@RequestParam(defaultValue="2")int pageSize,@RequestParam(defaultValue="1") int pageNumber){ System.out.println(pageSize+" "+pageNumber); return "main.jsp"; }
(3)如果強制要求必須有某個參數,使用required屬性
@RequestMapping("demo2") public String demo2(@RequestParam(required=true) String name){ System.out.println("name 是 SQL 的查詢條件,必須要傳遞 name 參數"+name); return "main.jsp"; }
(4)傳遞List類型的參數 使用value屬性,因為在前端傳遞過來的list都會放入一個參數名稱中,只要把這個參數名稱和一個List類型變量進行綁定
@RequestMapping("demo5") public String demo5(String name,int age,@RequestParam("hover")List<String> abc){ System.out.println(name+" "+age+" "+abc); return "main.jsp"; }
(5)請求參數中對象.屬性格式
jsp中的代碼如下
<input type="text" name="peo.name"/> <input type="text" name="peo.age"/>
此時需要創建一個類,類中要有一個屬性是peo,且這個屬性的類型必須是包含name,age這個兩個屬性的類,兩個類都要有get/set方法,
Demo類型
public class Demo { private People peo; public People getPeo() { return peo; } public void setPeo(People peo) { this.peo = peo; } @Override public String toString() { return "Demo [peo=" + peo + "]"; } }
People 類型
public class People { 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; } @Override public String toString() { return "People [name=" + name + ", age=" + age + "]"; } }
controller 的接受參數
@RequestMapping("demo6") public String demo6(Demo demo){ System.out.println(demo); return "main.jsp"; }
(三) restful風格的參數
首先請求參數的格式一定的要求,老的方式是<a href="demo8?name=張三&age=23">跳轉</a>,
而restful格式是:<a href="demo8/123/abc">跳轉</a>
在控制器中:
在@RequestMapping 中一定要和請求格式對應
{名稱} 中名稱自定義名稱
@PathVariable 獲取@RequestMapping 中內容,默認按照方法參數名稱去尋找.
@RequestMapping("demo8/{id1}/{name}") public String demo8(@PathVariable String name,@PathVariable("id1") int age){ System.out.println(name +" "+age); return "/main.jsp"; }