本文最后更新于 2026年4月27日 晚上
h1 align=”center”>使用 Bean Validation 注解对接口参数进行校验
起因
在编写后台程序的时候发现可以用 Bean Validation 注解对接口参数进行校验
这样可以更方便实现参数校验
代码实现
首先引入 Bean Validation 插件
然后在所有dto请求文件中有需要校验的字段添加对应注解
然后在所有引用到这些dto的控制器中的方法里添加 @Valid 注解进行参数校验
注意前台控制器里也要做同样的修改
做完这些然后就要去优化 GlobalExceptionHandler 异常处理的提示了
在全局异常处理类中添加对应的方法来处理这些参数检测的异常提醒
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
|
@ExceptionHandler(MethodArgumentNotValidException.class) public ResponseResult handleMethodArgumentNotValidException(MethodArgumentNotValidException exception) { FieldError fieldError = exception.getBindingResult().getFieldError(); String errorMessage = fieldError != null ? fieldError.getDefaultMessage() : "参数校验失败"; log.error("参数校验失败:{}", errorMessage); return ResponseResult.errorResult(AppHttpCodeEnum.SYSTEM_ERROR.getCode(), errorMessage); }
@ExceptionHandler(BindException.class) public ResponseResult handleBindException(BindException exception) { FieldError fieldError = exception.getBindingResult().getFieldError(); String errorMessage = fieldError != null ? fieldError.getDefaultMessage() : "参数绑定失败"; log.error("参数绑定校验失败:{}", errorMessage); return ResponseResult.errorResult(AppHttpCodeEnum.SYSTEM_ERROR.getCode(), errorMessage); }
@ExceptionHandler(ConstraintViolationException.class) public ResponseResult handleConstraintViolationException(ConstraintViolationException exception) { Set<ConstraintViolation<?>> violations = exception.getConstraintViolations(); String errorMessage = violations.stream() .map(ConstraintViolation::getMessage) .collect(Collectors.joining("; ")); if (errorMessage.isEmpty()) { errorMessage = "参数校验失败"; } log.error("约束校验失败:{}", errorMessage); return ResponseResult.errorResult(AppHttpCodeEnum.SYSTEM_ERROR.getCode(), errorMessage); }
|
相关注解解释
下面对上面用到的一些注解进行解释
@NotBlank
@NotBlank 用于验证字符串不能为 null,并且去除首尾空格后长度必须大于 0
1.他只能用于字符串类型(String)
2.他会自动去除字符串首尾的空格进行验证
3.如果是null、空字符串("")、只包含空格的字符串(" ")都会验证失败
他可以用在对输入框字符串的检测 如
1.用户名、密码等必填的文本字段
2.文章标题、内容等不能为空的字符串
3.任何需要确保有实际内容的字符串字段
@NotNull
@NotNull 用于验证字段值不能为 null
1.它可以用于任何类型(String、Integer、Boolean、对象等)
2.它使用时只检查是否为 null,不检查内容
3.而且它对于字符串,空字符串("")是允许的
4.对于集合,空集合也是允许的
这个注解有以下使用场景
1.必填的数字字段(如 ID、年龄、数量等)
2.必填的布尔字段(如状态标识)
3.必填的日期字段
4.必填的枚举类型
5.必填的对象引用
@Pattern
@Pattern 用于验证字符串是否匹配指定的正则表达式
1.它只能只能用于字符串类型(String)
2.它是通过 regexp 属性指定正则表达式的
3.它的 null 值被认为是有效的(如果你这个字段必须是非空的(如邮箱,电话号码等),需配合 @NotNull 或 @NotBlank 来一起使用)
4.它可以自定义错误提示信息
它的使用场景如下
1.项目中的手机号码和邮箱的格式验证
2.对身份证号的格式验证
3.对密码强度验证(如必须包含字母和数字)
4. URL 格式验证
@Valid
在对应的控制器方法中添加上 @Valid 注解就可以触发校验
PS:该系列只做为作者学习开发项目做的笔记用
不一定符合读者来学习,仅供参考
预告
后续会记录博客的开发过程
每次学习会做一份笔记来进行发表
“一花一世界,一叶一菩提”
版权所有 © 2026 云梦泽
欢迎访问我的个人网站:https://hgt12.github.io/