【 Spring MVC 核心功能(二) - 获取参数(上)】
文章目录
一、获取单个参数
在 Spring MVC 中可以直接⽤⽅法中的参数来实现传单个参,⽐如以下代码:
@RequestMapping("/m1")public Object method_1(String name) {System.out.println("参数 name:" + name);return "/index.html";}
在 postman 中访问⽅法:
程序运行结果得:
二、获取多个参数
在 Spring MVC 中可以直接⽤⽅法中的参数来实现传多个参,⽐如以下代码:
@RequestMapping("/m3")public Object method_3(String name, String pwd) {System.out.println("name 参数:" + name);System.out.println("pwd 参数:" + pwd);return "/index.html";}
使用 postman 访问得:
程序运行得:
重要说明: 当有多个参数时,前后端进⾏参数匹配时,是以参数的名称进⾏匹配的,因此参数的位置是不影响后端获取参数的结果
通过在方法中加多个参数我们就可以实现传入多个参数,但是当我们需要传入更多参数时我们还是无限制的在方法中加参数吗?这显然不现实,这时我们就可以通过传入对象来解决 !!
三、获取对象
Spring MVC 可以⾃动实现参数对象的赋值,⽐如 Person 对象:
import lombok.Data;
@Data
public class Person {private int id;private String name;private String password;
}
传递对象代码实现:
@RequestMapping("/m2")public Object method_2(Person p){System.out.println("对象中的 name:"+p.getName());System.out.println("对象中的 password:"+p.getPassword());return "/index.html";}
使用 postman 访问:
程序运行结果:
注意: 传递对象参数时,还是需要在 url 中输入对应的对象属性参数,并且注意参数名称保持一致 !!
四、后端参数重命名
4.1 使用 @RequestParam 重命名参数
某些特殊的情况下,前端传递的参数 key 和我们后端接收的 key 不⼀致,⽐如前端传递了⼀个time 给后端,⽽后端⼜是用 createtime 字段来接收的,这样就会出现参数接收不到的情况,如果出现这种情况,我们就可以使⽤ @RequestParam 来重命名后端的参数值
具体实现代码:
//后端参数重命名 @RequestParam是前端传来的参数key ,而UserName是后端设置的参数key@RequestMapping("/rename")public String rename(@RequestParam("ua") String UserName){return "Name:" + UserName;}
使用 postman 测试得:
4.2 @RequestParam 中参数必传
上⾯的列⼦有个弊端,如果我们是前端传递⼀个⾮ ua 的参数,就会出现程序报错的情况,如下图所示:
这是因为后端已经声明了前端必须传递⼀个 ua 的参数,但是前端没有给后端传递,我们查看
@RequestParam 注解的源码细节就可以发现端倪,如下:
4.3 设置非必传参数
如果我们的实际业务前端的参数是⼀个⾮必传的参数,我们可以通过设置 @RequestParam 中的
required=false 来避免不传递时报错,具体实现如下:
//注意:当设置 @RequestParam 后,前端必须传入参数,不然程序就会报错,可以如下修改!此时前端不传该参数,后端认为是null,不会报错@RequestMapping("/rename")public String rename(@RequestParam(value = "ua", required = false) @RequestBody String UserName) {return "Name:" + UserName;}
使用 postman 测试得:
五、使用 @PathVariable 获取URL中参数
代码实现如下:
//http://127.0.0.1:8080/user/student/209000804/tanchen
@RequestMapping("/student/{id}/{name}") //student为url地址 加了大括号的为参数
public String getStudentInfo(@PathVariable Integer id, @PathVariable String name) {return "ID:" + id + " Name:" + name;
}
此时,student为url地址 加了大括号的为参数,输入 url 的时候需要将参数设置为 url路径。并且输入 url 地址时,对应的参数一个都不能省略
使用 postman 测试得: