【SpringMVC03】SpringMVC参数接收

所谓接收参数就是从前端传过来的请求中获取参数。

1 接收简单类型参数

简单类型包括基本数据类型、String以及Date类型,接收策略是同名策略,只要请求url参数名和后端控制器方法形参名一致即可接收,如有以下请求url:

http://localhost:8080/param/simple?id=1&name=hello&gender=true&birth=2020-10-10 10:10:10

书写如下Controller即可接收到url上的四个参数:

 

@Controller
@RequestMapping("/param")
public class ParamController {

    @RequestMapping("/simple")
    public String simpleTest(Integer id, String name, Boolean gender, @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") Date birth){
        System.out.println("id = " + id);
        System.out.println("name = " + name);
        System.out.println("gender = " + gender);
        System.out.println("birth = " + birth);
        return "hello1";
    }
}
  • @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss"):定义Date类型的转换格式;

测试:

在实际开发中,不建议在方法的参数中写这么多的形参来接收参数。这样既不利于管理,后续也可能会面临将这些零散的参数封装成对象。

2 接收实体类类型参数

当接收的参数是实体类类型的时候,接收策略仍然是同名策略,不过和简单类型不同的是,实体类类型要求的是接收参数与实体类属性同名

仍然是相同的url:

http://localhost:8080/param/simple?id=1&name=hello&gender=true&birth=2020-10-10 10:10:10

编写对应的实体类User:

public class User {
    private Integer id;
    private String name;
    private Boolean gender;
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
    private Date birth;
    ......

Controller:

@RequestMapping("/object")
public String objectTest(User user){
    System.out.println("user = " + user);
    return "hello1";
}

 测试:

3 接收数组参数

编写一个jsp去发送带有数组类型的请求:

<form action="${pageContext.request.contextPath}/param/array">
    <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>

Controller:

@RequestMapping("/array")
public String arrayTest(String[] hobby){
    for (String s : hobby) {
        System.out.println(s+" ");
    }
    return "hello1";
}

测试:

数组收参也可以转换为实体收参,只需要在实体类中添加一个数组类型的参数:

public class User {
    private Integer id;
    private String name;
    private Boolean gender;
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
    private Date birth;
    private String[] hobby;
    ......

对应的JSP也进行简单的修改:

<form action="${pageContext.request.contextPath}/param/object-array">
    id:<input type="text" name="id"><br>
    name:<input type="text" name="name"><br>
    gender:<input type="text" name="gender"><br>
    birth:<input type="text" name="birth"><br>
    <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>

Controller:

@RequestMapping("/object-array")
public String objectArrayTest(User user){
    System.out.println(user);
    return "hello1";
}

测试:

4 接收集合参数

定义一个集合实体类:

public class UserList {
    private List<User> users;
    ......

Controller:

@RequestMapping("/list")
public String listTest(UserList userList){
    for (User user : userList.getUsers()) {
        System.out.println(user+ " ");
    }
    return "hello1";
}

5 接收路径参数

可以在访问路径上定义一些命名路径,例如{id},将这些路径捕获后传给Controller的形参去接收:

@RequestMapping("/path/{id}")
public String pathTest(@PathVariable("id") Integer id){
    System.out.println(id);
    return "hello1";
}

@RequestMapping("/paths/{id}/{name}")
public String pathsTest(@PathVariable("id") Integer id,@PathVariable("name") String name){
    System.out.println(id);
    System.out.println(name);
    return "hello1";
}
  • @PathVariable("id") Integer id:接收路径参数的注解,当形参名和路径参数名同名时,括号里面的内容可以省略;

  • /path/{id}{id}为路径参数,和*等价,例如url:/path/10,路径参数id匹配到的值为10;

测试:

 

版权声明:
作者:jackqiang
链接:http://www.jackqiang.com/framework/springmvc/2082/springmvc_get_param/
来源:JackQiang's
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>
文章目录
关闭
目 录