SpringMvc不同类型参数传递与接收

288 阅读6分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第15天,点击查看活动详情

SpringMvc不同类型参数传递与接收

前言

@RequestParam , @RequestBody , @PathVariable 区别


一.Get请求

(1)普通参数接收

在postman中,请求参数可直接写url中或填写在Params中

1. 请求url

http://localhost:8080/delete?name=guanzhi&age=20

2. 后端接收

    @GetMapping("/delete")
    public String delete(@RequestParam( "name") String userName, String age) {
        System.out.println("Get 普通参数接收 =>" + userName + " - " + age);
        return "delete:ok";
    }
  • 当 请求参数名 与 形参参数名 相同时框架会自动进行映射赋值
  • 当 请求参数名 与 形参参数名 不同时需通过@RequestParam注解绑定请求参数与形参参数

(2)Pojo参数接收

在postman中,请求参数可直接写url中或填写在Params中

1.请求url

http://localhost:8080/delete?name=guanzhi&age=20

2.后端接收

    @GetMapping("/delete")
    public String delete(User user) {
        System.out.println("Get Pojo参数接收 =>" + user);
        return "delete:ok";
    }
  • 当 请求参数名 与 实体类中属性名 相同时框架会自动进行映射赋值

(3)数组参数接收

在postman中,请求参数可直接写url中或填写在Params中

1.请求url

http://localhost:8080/delete?likes=唱&likes=跳&likes=打篮球

2.后端接收

    @GetMapping("/delete")
    public String delete(String[] likes) {
        System.out.println("Get 数组参数接收 =>" + Arrays.toString(likes));
        return "delete:ok";
    }
  • 需要保证传递的每个请求参数名与形参名称保持一致否则无法接收名称不一致的

(4)集合参数接收

在postman中,请求参数可直接写url中或填写在Params中

1.请求url

http://localhost:8080/delete?likes=唱&likes=跳&likes=打篮球

2.后端接收

    @GetMapping("/delete")
    public String delete(@RequestParam List<String> likes) {
        System.out.println("Get 集合参数接收 =>" + likes);
        return "delete:ok";
    }
  • 由于List是引用类型,系统会默认造List的对象set赋值,因此需要使用@RequestParam使其作为集合的数据出现

(5)Json数据传递参数

在postman中,通过Body -> raw -> Json 发送Json格式数据

(5.1)集合参数

1.请求url
http://localhost:8080/delete
2.Json数据
["唱","跳","rap","打篮球"]
3.后端接收
    @GetMapping("/delete")
    public String delete(@RequestBody List<String> likes) {
        System.out.println("Get Json集合参数接收 =>" + likes);
        return "delete:ok";
    }
  • 由于数据是在请求体中,因此需要加上@RequestBody注解

(5.2)Pojo参数

1.请求url
http://localhost:8080/delete
2.Json数据
{
    "name":"观止",
    "age":18
}
3.后端接收
    @GetMapping("/delete")
    public String delete(@RequestBody User user) {
        System.out.println("Get JsonPojo参数接收 =>" + user);
        return "delete:ok";
    }
  • 由于数据是在请求体中,因此需要加上@RequestBody注解

(5.3)集合Pojo参数

1.请求url
http://localhost:8080/delete
2.Json数据
[    { "name":"观止","age":18},    { "name":"study","age":19}]
3.后端接收
    @GetMapping("/delete")
    public String delete(@RequestBody List<User> user) {
        System.out.println("Get Json集合Pojo参数接收 =>" + user);
        return "delete:ok";
    }
  • 由于数据是在请求体中,因此需要加上@RequestBody注解

(6)日期类型参数传递

(6.1)如下可直接传递接收

1.请求url
http://localhost:8080/dateGet?date=2022/12/17 12:00:00
2.后端接收
    @GetMapping("/dateGet")
    public String delete(Date date) {
        System.out.println("Get 日期类型参数接收 => " + date);
        return "dateGet:ok";
    }
3.打印格式
Get 日期类型参数接收 =>Sat Dec 17 12:00:00 CST 2022

(6.2)其他格式传递接收

1.请求url
http://localhost:8080/dateGet?date=2022-12-17 08:08:08
2.后端接收
    @GetMapping("/dateGet")
    public String delete(@DateTimeFormat(pattern = "yyyy-MM-dd hh:mm:ss") Date date) {
        System.out.println("Get 日期类型参数接收 =>" + date);
        return "dateGet:ok";
    }
​
3.打印格式
Get 日期类型参数接收 =>Sat Dec 17 08:08:08 CST 2022
  • 需要使用@DateTimeFormat注解匹配传递的时间格式

(7)路径参数接收

1.请求url

http://localhost:8080/get/guanzhi/20

2.后端接收

    @GetMapping("/get/{name}/{age}")
    public String delete(@PathVariable("name") String userName, @PathVariable int age) {
        System.out.println("Get 路径参数接收 => " + userName + ":" + age);
        return "dateGet:ok";
    }
  • 通过 @PathVariable 可以将 URL 中占位符{}参数绑定到控制器处理方法的形参中
  • 当占位符中的参数与形参名称一致时可以简写@PathVariable
  • 当占位符中的参数与形参名称不一致时需要指定具体参数@PathVariable("name")

二.Post请求

(1)普通参数接收

在postman中,请求参数写在 Body -> x-www-form-urlencoded中

1. 请求url

http://localhost:8080/save

2. 后端接收

    @PostMapping("/save")
    public String save(@RequestParam( "name") String userName, String age) {
        System.out.println("Post 普通参数接收 =>" + userName + " - " + age);
        return "save:ok";
    }
  • 当 请求参数名 与 形参参数名 相同时框架会自动进行映射赋值
  • 当 请求参数名 与 形参参数名 不同时需通过@RequestParam注解绑定请求参数与形参参数

(2)Pojo参数接收

在postman中,请求参数写在 Body -> x-www-form-urlencoded中

1.请求url

http://localhost:8080/save

2.后端接收

    @PostMapping("/save")
    public String save(User user) {
        System.out.println("Post Pojo参数接收 =>" + user);
        return "save:ok";
    }
  • 当 请求参数名 与 实体类中属性名 相同时框架会自动进行映射赋值

(3)数组参数接收

在postman中,请求参数写在 Body -> x-www-form-urlencoded中

1.请求url

http://localhost:8080/save

2.后端接收

    @PostMapping("/save")
    public String save(String[] likes) {
        System.out.println("Post 数组参数接收 =>" + Arrays.toString(likes));
        return "save:ok";
    }
  • 需要保证传递的每个请求参数名与形参名称保持一致否则无法接收名称不一致的

(4)集合参数接收

在postman中,请求参数写在 Body -> x-www-form-urlencoded中

1.请求url

http://localhost:8080/save

2.后端接收

    @PostMapping("/save")
    public String save(@RequestParam List<String> likes) {
        System.out.println("Post 集合参数接收 =>" + likes);
        return "save:ok";
    }
  • 由于List是引用类型,系统会默认造List的对象set赋值,因此需要使用@RequestParam使其作为集合的数据出现

(5)Json数据传递参数

在postman中,通过Body -> raw -> Json 发送Json格式数据

(5.1)集合参数

1.请求url
http://localhost:8080/save
2.Json数据
["唱","跳","rap","打篮球"]
3.后端接收
    @PostMapping("/save")
    public String save(@RequestBody List<String> likes) {
        System.out.println("Post Json集合参数接收 =>" + likes);
        return "save:ok";
    }
  • 由于数据是在请求体中,因此需要加上@RequestBody注解

(5.2)Pojo参数

1.请求url
http://localhost:8080/save
2.Json数据
{
    "name":"观止",
    "age":18
}
3.后端接收
    @PostMapping("/save")
    public String save(@RequestBody User user) {
        System.out.println("Post JsonPojo参数接收 =>" + user);
        return "save:ok";
    }
  • 由于数据是在请求体中,因此需要加上@RequestBody注解

(5.3)集合Pojo参数

1.请求url
http://localhost:8080/save
2.Json数据
[    { "name":"观止","age":18},    { "name":"study","age":19}]
3.后端接收
    @PostMapping("/save")
    public String save(@RequestBody List<User> user) {
        System.out.println("Post Json集合Pojo参数接收 =>" + user);
        return "save:ok";
    }
  • 由于数据是在请求体中,因此需要加上@RequestBody注解