马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
Http哀求能携带各种格式的哀求参数。因此也就须要差别的吸收方式。
1、简朴参数
- 哀求参数名与方法形参变量名类似时,SpringBoot会主动举行范例转换。
- 哀求参数名与方法形参变量名差别时,可以利用@RequestParam注解举行映射。可以通过@RequestParam注解中的value属性大概name属性指定哀求参数名,将其映射到方法形参变量。@RequestParam注解中required属性默以为true,意思是前端必须转达这个参数,前端不传则前端会返回4xx状态码。修改required为false,此参数为非必须。在用聚集吸收哀求参数时也须要利用@RequestParam注解。
先测试哀求参数名与方法形参变量名类似的环境。
发送哀求:哀求方式为GET,哀求参数为name=Tom和age=10,GET哀求方式的哀求参数放在哀求路径后。
- // 前端发送GET请求
- http://localhost:8080/simpleParam?name=Tom&age=10
复制代码
界说接口吸收哀求:
- // 简单参数
- @RequestMapping("/simpleParam")
- public String simpleParam(String name, Integer age) {
- System.out.println(username + ":" + age);
- return "OK";
- }
- // 控制台输出:
- // Tom:10
- // 前端接收到响应:
- // OK
复制代码 在吸收哀求的接口上利用了@RequestMapping注解,这个注解界说了接口吸收哀求的路径。在Restful风格下,会更换成其衍生注解@GetMapping、@PostMapping、@DeleteMapping、@PutMapping等。
发送哀求:哀求方式为POST,哀求参数为name=Tom和age=20,POST哀求方式的哀求参数放在哀求体。
- // 前端发送POST请求,可以看到,路径后没有请求参数,请求参数放在请求体中
- http://localhost:8080/simpleParam
复制代码
界说接口吸收哀求,利用@PostMapping注解设置哀求路径:
- // 简单参数
- @PostMapping("/simpleParam")
- public String simpleParamPost(String name, Integer age) {
- System.out.println(name + ":" + age);
- return "ok!";
- }
- // 控制台输出:
- // Tom:20
- // 前端接收到响应:
- // ok!
复制代码 测试哀求参数名与方法形参变量名差别的环境。
发送哀求:哀求方式为GET,哀求参数为name=Tom和age=10,GET哀求方式的哀求参数放在哀求路径后。
- // 前端发送GET请求
- http://localhost:8080/simpleParam?name=Tom&age=10
复制代码 这次在接口方法中修改形参变量名。前端转达的变量名为 name,接口方法的变量名为username。利用@RequestParam将name映射到username。
- // 简单参数
- @GetMapping("/simpleParam")
- public String simpleParamGet(@RequestParam(name = "name")String username, Integer age) {
- System.out.println(username + ":" + age);
- return "OK";
- }
复制代码 2、实体参数
实体参数分为简朴实体参数和复杂实体参数。
简朴实体参数指的是用一个类去吸收哀求参数,这个类中的成员变量没有嵌套其他类。
复杂实体参数指的是用类中嵌套了其他类的类去吸收哀求参数。
这两种环境在发送哀求时略有差别。但都须要包管哀求参数名与实体类的成员变量名类似。
简朴实体参数举例:
发送哀求:以GET方式发送哀求。哀求参数为name=Tom和age=10。
- // 前端发送GET请求
- http://localhost:8080/simplePojo?name=Tom&age=10
复制代码 吸收哀求接口为:
- // 简单实体对象
- @GetMapping("/simplePojo")
- public String simplePojo(User user){
- System.out.println(user.getName() + ":" + user.getAge());
- return "ok";
- }
复制代码 接口方法情势参数利用了一个类User,该类界说为:
- public class User {
- private String name;
- private Integer age;
- public User() {
- }
- public User(String name, Integer age, Address address) {
- this.name = name;
- this.age = age;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public Integer getAge() {
- return age;
- }
- public void setAge(Integer age) {
- this.age = age;
- }
- @Override
- public String toString() {
- return "User{" +
- "name='" + name + '\'' +
- ", age=" + age +
- '}';
- }
- }
复制代码 SpringBoot会主动举行范例转换,将name和age转换到User的成员变量name和age中。
复杂实体参数举例:
在发送简朴实体参数时,只发送了User的姓名和年岁,如今还想增长User的所在。起首改造一下User类,增长Address成员变量, 如下:
- public class User {
- private String name;
- private Integer age;
- private Address address;
- public User() {
- }
- public User(String name, Integer age, Address address) {
- this.name = name;
- this.age = age;
- this.address = address;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public Integer getAge() {
- return age;
- }
- public void setAge(Integer age) {
- this.age = age;
- }
- public Address getAddress() {
- return address;
- }
- public void setAddress(Address address) {
- this.address = address;
- }
- @Override
- public String toString() {
- return "User{" +
- "name='" + name + '\'' +
- ", age=" + age +
- ", address=" + address +
- '}';
- }
- }
复制代码 Address类中有两个成员变量,分别是省份province和都会city,该类界说为:
- public class Address {
- private String province;
- private String city;
- public Address() {
- }
- public Address(String province, String city) {
- this.province = province;
- this.city = city;
- }
- public String getProvince() {
- return province;
- }
- public void setProvince(String province) {
- this.province = province;
- }
- public String getCity() {
- return city;
- }
- public void setCity(String city) {
- this.city = city;
- }
- @Override
- public String toString() {
- return "Address{" +
- "province='" + province + '\'' +
- ", city='" + city + '\'' +
- '}';
- }
- }
复制代码 由于此时前端转达的参数有四个,分别为姓名、年岁、省份、都会,参数目较多,因此思量利用POST哀求方式:
- // 使用POST请求方式,请求参数放在请求体中
- http://localhost:8080/complexPojo
复制代码
Address也是一个实体类,在给Address传参时,利用的是变量名.变量名的格式。
吸收哀求接口为:
- // 复杂实体对象
- @PostMapping("/complexPojo")
- public String complexPojo(User user) {
- System.out.println(user);
- return "yes";
- }
- // 控制台输出:
- // User{name='Tom', age=21, address=Address{province='湖北', city='武汉'}}
- // 前端响应结果:
- // yes
复制代码 3、数组参数
利用数组吸收哀求参数时,只须要在接口方法中传入一个数组,同时包管数组名与哀求参数名类似。
发送哀求:利用GET方式发送哀求,哀求参数为hobby=game,hobby=basketball,hobby=java。
- // 使用GET方式发送请求
- http://localhost:8080/arrayParam/?hobby=game&hobby=basketball&hobby=java
复制代码
哀求吸收接口为:
- // 数组参数
- @GetMapping("/arrayParam")
- public String arrayParam(String[] hobby) {
- System.out.println(Arrays.toString(hobby));
- return "ok";
- }
复制代码 4、聚集参数
在利用聚集吸收哀求参数时,须要保持变量名与哀求参数名划一,而且利用@RequestParam注解将哀求参数与聚集绑定,由于默认环境是利用数组吸收。
发送哀求:利用POST方式发送哀求,哀求参数为hobby=game,hobby=basketball,hobby=java。
- // POST方式发送请求,请求参数在请求体中
- http://localhost:8080/listParam
复制代码
吸收哀求接口为:
- // 集合参数接收,需要使用@RequestParam注解
- @PostMapping("/listParam")
- public String listParam(@RequestParam List<String> hobby){
- System.out.println(hobby.toString());
- return "ok";
- }
复制代码 5、日期参数
前端转达日期参数时,服务端同样须要利用日期范例的参数举行吸收。一样平常常用LocalDataTime的对象举行吸收。
由于日期格式多样,以是须要在参数前利用@DateTimeFormat注解,通过pattern属性指定日期格式。
- @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") // 年-月-日 时:分:秒
复制代码 发送哀求:以GET方式发送哀求,哀求参数为updateTime=2024-12-04 14:36:00。
- // GET方式发送请求
- http://localhost:8080/dateParam?updateTime=2024-12-04 14:36:00
复制代码
吸收哀求接口为
- // 日期参数,使用@DateTimeFormat注解指定日期格式
- @GetMapping("/dateParam")
- public String dateParam(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime updateTime) {
- System.out.println(updateTime);
- return "ok";
- }
复制代码 6、Json格式参数(常用)
前端在利用Json格式数据转达参数时,必须利用POST哀求方式发送哀求,Json数据放在哀求体中。
在Java服务端通常利用实体对象吸收Json格式数据。实体类中的成员变量名应和Json中的key保持划一,条理布局也应该保持划一。同时须要在方法形参前加上@RequestBody注解,将Json数据封装到实体对象中。
发送哀求:利用POST方式发送哀求。哀求参数置于哀求体中。
- // POST方式发送请求,Json格式数据只能通过POST方式发出
- http://localhost:8080/jsonParam
复制代码
Json数据有两层,第一层有name、age、address三个量,第二层封装在address中,有province、city两个量,因此Java服务端吸收的实体对象在布局与变量名上须要于此保持划一。
吸收哀求接口:
- // JSON参数
- @PostMapping("/jsonParam")
- public String jsonParam(@RequestBody User user){
- System.out.println(user);
- return "ok";
- }
复制代码 接口参数中的User类在第一节已经利用过,这里不多赘述。
7、路径参数(常用)
路径参数是指转达的参数已经成为路径的一部分。也就是说,既是路径的一部分,也作为参数转达须要被服务端获取并利用。
吸收路径参数要三步利用:
- 须要在界说路径的注解上将路径参数部分利用 {路径参数名} 更换。 { } 是路径参数占位符;
- 接口方法中继承路径参数的形参名与路径参数名保持划一;
- 吸收路径参数的形参前须要加上@PathVariable注解。
发送哀求:以GET方式发送哀求,路径参数为一个数字,体现某张表的id字段。
- // GET方式发送请求,路径参数为1
- http://localhost:8080/pathParam/1
复制代码
吸收哀求接口:
- // 路径参数
- @GetMapping("/pathParam/{id}")
- public String pathParam(@PathVariable Integer id){
- System.out.println(id);
- return "ok";
- }
复制代码 8、吸收哀求参数常用的几个注解
@RequestMapping注解:一样平常利用其衍生注解
注解表明@RequestMapping用于界说接口方法的哀求路径(一样平常利用其衍生注解更换)@GetMappingGet哀求方式。一样平常用于向特定的资源发出哀求,查询资源。@PostMappingPost哀求方式。 一样平常用于向指定资源提交数据举行处置惩罚哀求@PutMappingPut哀求方式。一样平常用于向指定资源位置上传其最新内容@DeleteMappingDelete哀求方式。一样平常用于哀求服务器删除哀求路径所标识的资源……@RequestParam注解:
有两种利用场景:
- 前端哀求携带简朴参数时,哀求参数名与接口方法变量名不划一,利用@RequestParam注解举行映射。
- 利用聚集吸收哀求参数时,须要在聚集变量前加@RequestParam注解,才气将数据主动封装到聚集中。
@RequestBody注解:
Json格式数据作为哀求数据时,在Java服务端须要利用实体类来吸收,而且须要在形参前加上@RequestBody注解。
@PathVariable注解:
在吸收路径参数时利用。
|