(二) - 请求参数接收
springMVC接收请求参数的方式有如下几种:
- 基本类型参数
- 实体收参(建议*)
- 数组收参
- 集合收参
- 路径参数
相关写法如下:
@Controller @RequestMapping("/hello") public class HelloController { //基本类型参数收参 //访问URL: localhost:8080/hello/test1?id=11&name=Ryan @RequestMapping("/test1") public String hello1(Integer id, String name){ System.out.println("test1"); System.out.println("id = " + id + ", name = " + name); return "hello"; } //实体收参 //访问URL: localhost:8080/hello/test2?age=30&name=Ryan&gender=false&birthday=2020/11/11%11:11:30 //spring能够识别的日期格式只有: YYYY/MM/DD hh:mm:ss @RequestMapping("/test2") public String hello2(User user){ System.out.println("test2"); System.out.println(user); return "hello"; } //数组收参 //访问URL: localhost:8080/hobby.jsp @RequestMapping("/test3") public String hello3(String hobby[]){ System.out.println("test3"); for (String s : hobby){ System.out.println(s); } return "hello"; } //集合收参 //访问URL: localhost"8080/userList.jsp @RequestMapping("/test4") public String hello4(UserList userList){ System.out.println("test3"); for (User users : userList.getUsers()){ System.out.println(users); } return "hello"; } //路径参数 //访问URL: localhost:8080/hello/test5/1/Ryan @RequestMapping("/test5/{id}/{name}") public String hello4(@PathVariable("id") Integer vid, @PathVariable("name") String vname){ System.out.println("test5"); System.out.println("id: " + vid); System.out.println("name: " + vname); return "hello"; } }
一. 基本类型参数收参
servlet代码:
@RequestMapping("/test1") public String hello1(Integer id, String name){ System.out.println("test1"); System.out.println("id = " + id + ", name = " + name); return "hello"; }
访问方式及返回:
服务器获取到参数:
二. 实体收参
servlet代码:
@RequestMapping("/test2") public String hello2(User user){ System.out.println("test2"); System.out.println(user); return "hello"; }
User类代码:
public class User { String name; Integer age; Boolean gender; Date birthday; @Override public String toString() { return "User{" + "name='" + name + '\'' + ", age=" + age + ", gender=" + gender + ", birthday=" + birthday + '}'; } public String getName() { return name; } public Integer getAge() { return age; } public Boolean getGender() { return gender; } public Date getBirthday() { return birthday; } public void setName(String name) { this.name = name; } public void setAge(Integer age) { this.age = age; } public void setGender(Boolean gender) { this.gender = gender; } public void setBirthday(Date birthday) { this.birthday = birthday; } }
访问方式及返回:
服务器获取到参数:
三. 数组收参
servlet代码:
@RequestMapping("/test3") public String hello3(String hobby[]){ System.out.println("test3"); for (String s : hobby){ System.out.println(s); } return "hello"; }
hobby.jsp代码:
<html> <head> <title>hobby</title> </head> <body> <form action="${pageContext.request.contextPath}/hello/test3"> <input type="checkbox" name="hobby" value="football">足球 <input type="checkbox" name="hobby" value="basketball">篮球 <input type="checkbox" name="hobby" value="volleyball">排球 <input type="submit" value="提交"> </form> </body> </html>
访问方式及返回:
服务器获取到参数:
四. 集合收参:
servlet代码:
@RequestMapping("/test4") public String hello4(UserList userList){ System.out.println("test3"); for (User users : userList.getUsers()){ System.out.println(users); } return "hello"; }
userList.jsp代码:
<body> <form action="${pageContext.request.contextPath}/hello/test4" method="post"> age: <input type="text" name="users[0].age"><br> name: <input type="text" name="users[0].name"><br> gender: <input type="text" name="users[0].gender"><br> birthday: <input type="text" name="users[0].birthday"><br> <hr> age: <input type="text" name="users[1].age"><br> name: <input type="text" name="users[1].name"><br> gender: <input type="text" name="users[1].gender"><br> birthday: <input type="text" name="users[1].birthday"><br> <input type="submit" value="提交"> </form> </body> </html>
访问方式及返回:
服务器获取到参数:
五. 路径参数:
servlet代码:
@RequestMapping("/test5/{id}/{name}") public String hello4(@PathVariable("id") Integer vid, @PathVariable("name") String vname){ System.out.println("test5"); System.out.println("id: " + vid); System.out.println("name: " + vname); return "hello"; }
访问方式及返回:
服务器获取参数:
六. 乱码问题:
一般有以下三层设置:
1. 页面中字符集统一
JSP: <%@page pageEncoding="utf-8"%>
HTML: <meta charset="UTF-8">
2. tomcat中字符集设置, 对get请求中, 中文乱码有效:
URIEncoding=utf-8
3. 在web.xml中设置如下filter, 对破石头请求中的中文参数乱码有效
<!--此过滤器会进行: request.setCharactorEncoding("utf-8");--> <filter> <filter-name>encoding</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>encoding</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
设置前:
设置后: