『博客开发日记-后台』之使用 validation 对接口参数进行校验

本文最后更新于 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
//处理 @RequestBody 参数校验异常(@Valid)
//当使用 @Valid 注解校验 @RequestBody 参数时抛出
@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);
}

//处理 @Valid 校验异常(用于表单参数、查询参数)
//当使用 @Valid 注解校验非 @RequestBody 参数时抛出
@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);
}


//处理单个参数校验异常(@Validated)
//当在类上使用 @Validated 注解,对方法参数进行校验时抛出
@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/


『博客开发日记-后台』之使用 validation 对接口参数进行校验
http://example.com/2026/04/23/『博客开发日记-后台』之使用 validation 对接口参数进行校验/
作者
云梦泽
发布于
2026年4月23日
更新于
2026年4月27日
许可协议