那我来为你详细讲解“详解Spring注解式参数校验”的完整攻略。
什么是参数校验
参数校验是指对于一个方法或者函数,在调用的时候需要对输入参数进行一定的验证和校验,以确保其满足调用方的需求,防止参数错误导致的问题。
在Spring框架中,参数校验可以通过注解来完成,这个功能是由Hibernate提供的,它将JSR 303规范映射到Java中,并提供了一些注解,如@NotNull、@NotEmpty、@Size等。
Spring参数校验的使用
Spring参数校验的使用非常简单。首先需要在方法的参数上标记相应的注解。例如,在以下的UserController中,我们使用了@Valid注解来校验UserModel中的参数:
@RestController
@RequestMapping("/api/v1/users")
public class UserController {
@PostMapping
public UserModel createUser(@RequestBody @Valid UserModel userModel) {
// ...
}
}
在上面的代码中,@Valid注解告诉Spring框架在调用userModel参数之前执行参数校验。
常用注解介绍
1. @NotNull & @NotEmpty & @NotBlank
- @NotNull:检查对象是否为空,无法检查字符串是否为空
- @NotEmpty:检查字符串、集合、Map、数组是否为空,不能接受null
- @NotBlank:只检查字符串不是null和不能为空字符串
public class UserModel {
@NotNull(message = "用户名不能为空")
private String username;
@NotEmpty(message = "密码不能为空")
private String password;
@NotBlank(message = "昵称不能为空")
private String nickname;
// ...
}
2. @Size
- @Size:检查字符长度,对于集合、Map、数组则检查元素个数
public class UserModel {
@Size(min = 6, max = 18, message = "用户名长度必须在6~18个字符之间")
private String username;
// ...
}
3. @Range
- @Range:检查数字是否在指定范围内
public class UserModel {
@Range(min = 1, max = 150, message = "年龄必须在1~150之间")
private Integer age;
// ...
}
具体实例
我们来看一个具体的例子,在下面的实例中我们定义一个请求参数名为“age”的整形参数,并使用@Range注释验证它是否在1 ~ 150范围内,如果验证失败,则返回一个带有400 Http状态代码和“年龄必须在1-150之间”的错误响应。
@RestController
@RequestMapping("/api")
public class SampleController {
@GetMapping("/range")
public ResponseEntity<String> checkAgeRange(@RequestParam @Range(min = 1, max = 150, message = "年龄必须在1~150之间") Integer age) {
return ResponseEntity.ok("年龄为" + age);
}
}
我们使用postman进行测试,输入url并设置age参数,如果age不在1 ~ 150范围内,将返回以下错误:
{
"timestamp": "2019-01-01T00:00:00.000+00:00",
"status": 400,
"error": "Bad Request",
"message": "年龄必须在1~150之间",
"path": "/api/range"
}
我们再看一个实例,在下面的代码中我们定义一个名为User的Java Bean,使用@NotNull注解验证email属性是否非空,使用@Range注解验证age属性是否在1~150范围内。
public class User {
@NotNull(message = "email不能为空")
private String email;
@Range(min = 1, max = 150, message = "年龄必须在1~150之间")
private Integer age;
// ...
}
使用UserModel作为控制器参数,比如:
@RestController
@RequestMapping("/api")
public class UserController {
@PostMapping("/user")
public ResponseEntity<String> createUser(@RequestBody @Valid User user) {
return ResponseEntity.ok("创建用户成功");
}
}
如果请求体缺少email或者age不在1~150范围内,则会返回400响应。
综上所述,我们详细讲解了Spring注解式参数校验的完整攻略,包括注解的介绍和使用,以及具体实例的演示。希望这篇攻略对您有帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解spring注解式参数校验 - Python技术站