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

导读:本篇文章讲解 SpringMvc不同类型参数传递与接收,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

前言

@RequestParam , @RequestBody , @PathVariable 区别

  • @RequestParam 用于接收url地址传参,表单传参【application/x-www-form-urlencoded】,例如
    • http://localhost:8080/get?name=guanzhi&age=18中的guanzhi和18
  • @PathVariable 用于接收包含在请求路径中的参数,例如
    • http://localhost:8080/get/guanzhi/20中的guanzhi和20
  • @RequestBody 用于接收Json数据【application/json】

一.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注解

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/82596.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!