spring中的请求参数
创建:2020/4/20
环境:spring-boot 2.2.6.RELEASE
修改:2020/4/20
@RequestMapping注解可以接收字符串数组,类级别的作用于所有方法,方法的访问路径是类级别与方法级别相结合。下面a方法的访问路径有 /mu/a, /mu/b, /yu/a, /yu/b
@RestController注解是@Controller和@ResponseBody的组合注解。使用@ResponseBody注解可以返回数据而不是页面,可以放置在方法或者类上面,类级别作用于所有方法。
@RestController
@RequestMapping(value = {"/mu", "/yu"})
public class RestBodyController {
@RequestMapping(value = {"/a", "/b"}, method = RequestMethod.GET)
public String a() {
return "a";
}
}
@RequestMapping注解还可以设定请求方法,对于各种请求方法还有对应简化的注解
@RequestMapping(value = "/", method = RequestMethod.GET) 等同于 @GetMapping("/")
@RequestMapping(value = "/", method = RequestMethod.POST) 等同于 @PostMapping("/")
@RequestMapping(value = "/", method = RequestMethod.DELETE) 等同于 @DeleteMapping("/")
@RequestMapping(value = "/", method = RequestMethod.PUT) 等同于 @PutMapping("/")
@RequestMapping(value = "/", method = RequestMethod.PATCH) 等同于 @PatchMapping("/")
查询参数
- @RequestParam注解接收查询参数的名称,使用defaultValue可以设置默认值,defaultValue只接收String类型。如果变量名和查询参数名相同可以简写。下面的方法可以这样访问 /home/?name=muyu
@GetMapping("/home")
public String home(@RequestParam("name")String name) {
// @RequestParam String name 简写形式
// @RequestParam(value = "name", defaultValue = "muyu") String name 设置默认值
// @RequestParam(defaultValue = "muyu") String name 设置默认值时也可以简写
return "home";
}
- 也可以将参数设置为JavaBean对象,此时查询参数名要与对象属性名相同,下面的方法可以这样访问 /?username=muyu&password=123
// User.java
public class User {
private String username;
private String password;
public User() {}
// 省略getter和setter方法
}
@ResponseBody
@GetMapping("/")
public String b(User user) {
return user.toString();
}
路径参数
- @RequestMapping注解中用{ }作为占位符, 在处理方法中用@PathVariable注解使用占位符中的变量,占位符中的变量名与方法中的变量名相同可以简写,下面的方法可以这样访问 /rc/123
@RestController
@RequestMapping("/rc")
public class RestBodyController {
@GetMapping(value = {"/{id}"})
public String a(@PathVariable(value = "id") int id) {
// @PathVariable int id 简写形式
return "a => " + id;
}
}
表单参数
- 表单提交直接将JavaBean对象作为参数即可,对象的属性名要和表单项的name对应
<form action="/form" method="post">
<label for="username">用户名</label>
<input type="text" id="username" name="username">
<label for="password">密码</label>
<input type="text" id="password" name="password">
<button type="submit">提交</button>
</form>
@ResponseBody
@PostMapping("/form")
public String postForm(User user) {
return user.toString();
}
- 对于表单的提交,我们可能还需要对表单内容进行校验
修改User类,注解@NotNull表示此属性不能为null,注解@Size设定了最大和最小字符串长度
// User.java
public class User {
@NotNull
@Size(min = 3, max = 5)
private String username;
@NotNull
@Size(min = 3, max = 5)
private String password;
public User() {}
// 省略getter和setter方法
}
使用@Valid注解开启对该对象的校验,当校验失败时errors.hasErrors()就会返回真
@ResponseBody
@PostMapping("/form")
public String postForm(@Valid User user, Errors errors) {
if(errors.hasErrors()) {
// 可以在此处进行校验失败后的操作
return "失败";
}
return user.toString();
}