(二) - 请求参数接收

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>

设置前:

 

 设置后:

 

posted @ 2020-12-09 18:34  山下明明子  阅读(98)  评论(0编辑  收藏  举报