【JavaWeb后端学习条记】SpringBoot框架下Http哀求参数吸收

[复制链接]
发表于 2025-12-13 11:05:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
Http哀求能携带各种格式的哀求参数。因此也就须要差别的吸收方式。
1、简朴参数



  • 哀求参数名与方法形参变量名类似时,SpringBoot会主动举行范例转换。
  • 哀求参数名与方法形参变量名差别时,可以利用@RequestParam注解举行映射。可以通过@RequestParam注解中的value属性大概name属性指定哀求参数名,将其映射到方法形参变量。@RequestParam注解中required属性默以为true,意思是前端必须转达这个参数,前端不传则前端会返回4xx状态码。修改required为false,此参数为非必须。在用聚集吸收哀求参数时也须要利用@RequestParam注解。
先测试哀求参数名与方法形参变量名类似的环境。
发送哀求:哀求方式为GET,哀求参数为name=Tom和age=10,GET哀求方式的哀求参数放在哀求路径后。
  1. // 前端发送GET请求
  2. http://localhost:8080/simpleParam?name=Tom&age=10
复制代码

界说接口吸收哀求:
  1. // 简单参数
  2. @RequestMapping("/simpleParam")
  3. public String simpleParam(String name, Integer age) {
  4.     System.out.println(username + ":" + age);
  5.     return "OK";
  6. }
  7. // 控制台输出:
  8. // Tom:10
  9. // 前端接收到响应:
  10. // OK
复制代码
在吸收哀求的接口上利用了@RequestMapping注解,这个注解界说了接口吸收哀求的路径。在Restful风格下,会更换成其衍生注解@GetMapping、@PostMapping、@DeleteMapping、@PutMapping等。
发送哀求:哀求方式为POST,哀求参数为name=Tom和age=20,POST哀求方式的哀求参数放在哀求体。
  1. // 前端发送POST请求,可以看到,路径后没有请求参数,请求参数放在请求体中
  2. http://localhost:8080/simpleParam
复制代码

界说接口吸收哀求,利用@PostMapping注解设置哀求路径:
  1. // 简单参数
  2. @PostMapping("/simpleParam")
  3. public String simpleParamPost(String name, Integer age) {
  4.     System.out.println(name + ":" + age);
  5.     return "ok!";
  6. }
  7. // 控制台输出:
  8. // Tom:20
  9. // 前端接收到响应:
  10. // ok!
复制代码
测试哀求参数名与方法形参变量名差别的环境。
发送哀求:哀求方式为GET,哀求参数为name=Tom和age=10,GET哀求方式的哀求参数放在哀求路径后。
  1. // 前端发送GET请求
  2. http://localhost:8080/simpleParam?name=Tom&age=10
复制代码
这次在接口方法中修改形参变量名。前端转达的变量名为 name,接口方法的变量名为username。利用@RequestParam将name映射到username。
  1. // 简单参数
  2. @GetMapping("/simpleParam")
  3. public String simpleParamGet(@RequestParam(name = "name")String username, Integer age) {
  4.     System.out.println(username + ":" + age);
  5.     return "OK";
  6. }
复制代码
2、实体参数

实体参数分为简朴实体参数和复杂实体参数。
简朴实体参数指的是用一个类去吸收哀求参数,这个类中的成员变量没有嵌套其他类。
复杂实体参数指的是用类中嵌套了其他类的类去吸收哀求参数。
这两种环境在发送哀求时略有差别。但都须要包管哀求参数名与实体类的成员变量名类似。
简朴实体参数举例:
发送哀求:以GET方式发送哀求。哀求参数为name=Tom和age=10。
  1. // 前端发送GET请求
  2. http://localhost:8080/simplePojo?name=Tom&age=10
复制代码
吸收哀求接口为:
  1. // 简单实体对象
  2. @GetMapping("/simplePojo")
  3. public String simplePojo(User user){
  4.     System.out.println(user.getName() + ":" + user.getAge());
  5.     return "ok";
  6. }
复制代码
接口方法情势参数利用了一个类User,该类界说为:
  1. public class User {
  2.     private String name;
  3.     private Integer age;
  4.     public User() {
  5.     }
  6.     public User(String name, Integer age, Address address) {
  7.         this.name = name;
  8.         this.age = age;
  9.     }
  10.     public String getName() {
  11.         return name;
  12.     }
  13.     public void setName(String name) {
  14.         this.name = name;
  15.     }
  16.     public Integer getAge() {
  17.         return age;
  18.     }
  19.     public void setAge(Integer age) {
  20.         this.age = age;
  21.     }
  22.     @Override
  23.     public String toString() {
  24.         return "User{" +
  25.                 "name='" + name + '\'' +
  26.                 ", age=" + age +
  27.                 '}';
  28.     }
  29. }
复制代码
SpringBoot会主动举行范例转换,将name和age转换到User的成员变量name和age中。
复杂实体参数举例:
在发送简朴实体参数时,只发送了User的姓名和年岁,如今还想增长User的所在。起首改造一下User类,增长Address成员变量, 如下:
  1. public class User {
  2.     private String name;
  3.     private Integer age;
  4.     private Address address;
  5.     public User() {
  6.     }
  7.     public User(String name, Integer age, Address address) {
  8.         this.name = name;
  9.         this.age = age;
  10.         this.address = address;
  11.     }
  12.     public String getName() {
  13.         return name;
  14.     }
  15.     public void setName(String name) {
  16.         this.name = name;
  17.     }
  18.     public Integer getAge() {
  19.         return age;
  20.     }
  21.     public void setAge(Integer age) {
  22.         this.age = age;
  23.     }
  24.     public Address getAddress() {
  25.         return address;
  26.     }
  27.     public void setAddress(Address address) {
  28.         this.address = address;
  29.     }
  30.     @Override
  31.     public String toString() {
  32.         return "User{" +
  33.                 "name='" + name + '\'' +
  34.                 ", age=" + age +
  35.                 ", address=" + address +
  36.                 '}';
  37.     }
  38. }
复制代码
Address类中有两个成员变量,分别是省份province和都会city,该类界说为:
  1. public class Address {
  2.     private String province;
  3.     private String city;
  4.     public Address() {
  5.     }
  6.     public Address(String province, String city) {
  7.         this.province = province;
  8.         this.city = city;
  9.     }
  10.     public String getProvince() {
  11.         return province;
  12.     }
  13.     public void setProvince(String province) {
  14.         this.province = province;
  15.     }
  16.     public String getCity() {
  17.         return city;
  18.     }
  19.     public void setCity(String city) {
  20.         this.city = city;
  21.     }
  22.     @Override
  23.     public String toString() {
  24.         return "Address{" +
  25.                 "province='" + province + '\'' +
  26.                 ", city='" + city + '\'' +
  27.                 '}';
  28.     }
  29. }
复制代码
由于此时前端转达的参数有四个,分别为姓名、年岁、省份、都会,参数目较多,因此思量利用POST哀求方式:
  1. // 使用POST请求方式,请求参数放在请求体中
  2. http://localhost:8080/complexPojo
复制代码

Address也是一个实体类,在给Address传参时,利用的是变量名.变量名的格式。
吸收哀求接口为:
  1. // 复杂实体对象
  2. @PostMapping("/complexPojo")
  3. public String complexPojo(User user) {
  4.     System.out.println(user);
  5.     return "yes";
  6. }
  7. // 控制台输出:
  8. // User{name='Tom', age=21, address=Address{province='湖北', city='武汉'}}
  9. // 前端响应结果:
  10. // yes
复制代码
3、数组参数

利用数组吸收哀求参数时,只须要在接口方法中传入一个数组,同时包管数组名与哀求参数名类似。
发送哀求:利用GET方式发送哀求,哀求参数为hobby=game,hobby=basketball,hobby=java。
  1. // 使用GET方式发送请求
  2. http://localhost:8080/arrayParam/?hobby=game&hobby=basketball&hobby=java
复制代码

哀求吸收接口为:
  1. // 数组参数
  2. @GetMapping("/arrayParam")
  3. public String arrayParam(String[] hobby) {
  4.     System.out.println(Arrays.toString(hobby));
  5.     return "ok";
  6. }
复制代码
4、聚集参数

在利用聚集吸收哀求参数时,须要保持变量名与哀求参数名划一,而且利用@RequestParam注解将哀求参数与聚集绑定,由于默认环境是利用数组吸收。
发送哀求:利用POST方式发送哀求,哀求参数为hobby=game,hobby=basketball,hobby=java。
  1. // POST方式发送请求,请求参数在请求体中
  2. http://localhost:8080/listParam
复制代码

吸收哀求接口为:
  1. // 集合参数接收,需要使用@RequestParam注解
  2. @PostMapping("/listParam")
  3. public String listParam(@RequestParam List<String> hobby){
  4.     System.out.println(hobby.toString());
  5.     return "ok";
  6. }
复制代码
5、日期参数

前端转达日期参数时,服务端同样须要利用日期范例的参数举行吸收。一样平常常用LocalDataTime的对象举行吸收。
由于日期格式多样,以是须要在参数前利用@DateTimeFormat注解,通过pattern属性指定日期格式。
  1. @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") // 年-月-日 时:分:秒
复制代码
发送哀求:以GET方式发送哀求,哀求参数为updateTime=2024-12-04 14:36:00。
  1. // GET方式发送请求
  2. http://localhost:8080/dateParam?updateTime=2024-12-04 14:36:00
复制代码

吸收哀求接口为
  1. // 日期参数,使用@DateTimeFormat注解指定日期格式
  2. @GetMapping("/dateParam")
  3. public String dateParam(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime updateTime) {
  4.     System.out.println(updateTime);
  5.     return "ok";
  6. }
复制代码
6、Json格式参数(常用)

前端在利用Json格式数据转达参数时,必须利用POST哀求方式发送哀求,Json数据放在哀求体中。
在Java服务端通常利用实体对象吸收Json格式数据。实体类中的成员变量名应和Json中的key保持划一,条理布局也应该保持划一。同时须要在方法形参前加上@RequestBody注解,将Json数据封装到实体对象中。
发送哀求:利用POST方式发送哀求。哀求参数置于哀求体中。
  1. // POST方式发送请求,Json格式数据只能通过POST方式发出
  2. http://localhost:8080/jsonParam
复制代码

Json数据有两层,第一层有name、age、address三个量,第二层封装在address中,有province、city两个量,因此Java服务端吸收的实体对象在布局与变量名上须要于此保持划一。
吸收哀求接口:
  1. // JSON参数
  2. @PostMapping("/jsonParam")
  3. public String jsonParam(@RequestBody User user){
  4.     System.out.println(user);
  5.     return "ok";
  6. }
复制代码
接口参数中的User类在第一节已经利用过,这里不多赘述。
7、路径参数(常用)

路径参数是指转达的参数已经成为路径的一部分。也就是说,既是路径的一部分,也作为参数转达须要被服务端获取并利用。
吸收路径参数要三步利用:

  • 须要在界说路径的注解上将路径参数部分利用 {路径参数名} 更换。 { } 是路径参数占位符;
  • 接口方法中继承路径参数的形参名与路径参数名保持划一;
  • 吸收路径参数的形参前须要加上@PathVariable注解。
发送哀求:以GET方式发送哀求,路径参数为一个数字,体现某张表的id字段。
  1. // GET方式发送请求,路径参数为1
  2. http://localhost:8080/pathParam/1
复制代码

吸收哀求接口:
  1. // 路径参数
  2. @GetMapping("/pathParam/{id}")
  3. public String pathParam(@PathVariable Integer id){
  4.         System.out.println(id);
  5.     return "ok";
  6. }
复制代码
8、吸收哀求参数常用的几个注解

@RequestMapping注解:一样平常利用其衍生注解
注解表明@RequestMapping用于界说接口方法的哀求路径(一样平常利用其衍生注解更换)@GetMappingGet哀求方式。一样平常用于向特定的资源发出哀求,查询资源。@PostMappingPost哀求方式。 一样平常用于向指定资源提交数据举行处置惩罚哀求@PutMappingPut哀求方式。一样平常用于向指定资源位置上传其最新内容@DeleteMappingDelete哀求方式。一样平常用于哀求服务器删除哀求路径所标识的资源……@RequestParam注解:
有两种利用场景:

  • 前端哀求携带简朴参数时,哀求参数名与接口方法变量名不划一,利用@RequestParam注解举行映射。
  • 利用聚集吸收哀求参数时,须要在聚集变量前加@RequestParam注解,才气将数据主动封装到聚集中。
@RequestBody注解:
Json格式数据作为哀求数据时,在Java服务端须要利用实体类来吸收,而且须要在形参前加上@RequestBody注解。
@PathVariable注解:
在吸收路径参数时利用。
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表