参数校验:jakarta.validation
参数校验:jakarta.validationg
Jakarta Validation(前身为JSR-380和Bean Validation)是Java生态中用于参数校验的标准规范,提供了一套声明式的校验机制。
常⻅注解
注解 | 适用数据类型 | 验证规则说明 |
---|---|---|
@NotBlank | CharSequence子类型(String等) | 值不为null且去除首尾空格后长度>0,如" " 不通过但"a" 通过 |
@NotEmpty | CharSequence子类型/Collection/Map/数组 | 值不为null且不为空(字符串长度≠0/集合大小≠0),如"" 或空集合不通过 |
@NotNull | 任意类型 | 值不为null,但允许空字符串或空集合 |
核心依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId></dependency>
使用示例
public class User {@NotNull(message = "用户名不能为空")private String username;@Size(min = 6, max = 20, message = "密码长度需在6-20位")private String password;@Email(message = "邮箱格式无效")private String email;@Valid // 级联校验private Address address;
}
触发验证
@RestController
@Validated // 启用方法级别验证
public class UserController {@PostMapping("/user")public Result createUser(@Valid @RequestBody User user) {// 当 User 对象不满足验证规则时,会抛出 MethodArgumentNotValidExceptionreturn Result.success("创建成功");}@GetMapping("/user/{id}")public Result getUser(@PathVariable @Min(1) Long id) {// 参数验证失败时抛出 ConstraintViolationExceptionreturn Result.success(userService.findById(id));}
}
异常处理
当验证失败时会抛出不同类型的异常:
- ConstraintViolationException: 方法参数验证失败
- MethodArgumentNotValidException: @Valid + @RequestBody 验证失败
- HandlerMethodValidationException: Handler 方法验证失败
- IllegalArgumentException:接收了不合法的参数