本文共 2662 字,大约阅读时间需要 8 分钟。
本文内容说明:
提醒:前端校验是基础,后端校验是必需,建议结合全局异常捕获来实现数据安全校验。本文将先从基础校验和统一异常处理说起,其他文章可参考分组校验和自定义注解校验的内容。
需要注意:- 使用@NotEmpty时,对于非空对象(如字符串、集合等)的校验- 对于Integer类型,建议使用@NotNull,而不是@NotEmpty- 定义自定义校验规则时,可以通过@Pattern注解使用正则表达式- 不同的校验类型有不同的默认提示信息
代码示例:
// 示例1:@NotBlankpublic class UserDTO { @NotBlank(message = "用户名不能为空") private String username;}// 示例2:自定义正则校验public class BrandEntity { @Pattern(regexp = "/^[a-zA-Z]$", message = "必须是a-z或A-Z字母") private String firstLetter;}
使用Hibernate Validator的校验注解需要在Controller方法上标注@Valid
,同时将注解应用到需要校验的对象上
public R save(@Valid @RequestBody BrandEntity brand) { // 处理校验结果}
通过BindingResult
接收校验结果,可以获取校验失败时的具体错误信息
public R save(@Valid @RequestBody BrandEntity brand, BindingResult result) { if (result.hasErrors()) { // 提取校验结果 Map errorMap = new HashMap<>(); result.getFieldErrors().forEach(item -> { errorMap.put(item.getField(), item.getDefaultMessage()); }); return R.error(400, "数据校验失败").put("data", errorMap); } else { brandService.save(brand); return R.ok(); }}
校验类型 | 注解示例 | 默认提示信息 | 使用场景 |
---|---|---|---|
@NotBlank | 如@NotBlank(message = "用户名不能为空") | 字段内容不能为空(去除空格后的内容也为空) | 适用于字符串类型字段 |
@NotNull | 如@NotNull(message = "ID不能为空") | 字段不为空 | 适用于所有非空对象(如Integer、String等) |
@Size | 如@Size(min=5, max=10, message = "长度必须在5-10之间") | 字段长度在min和max之间 | 适用于数组、集合、字符串等类型 |
@Future | 如@Future(message = "日期必须在未来") | 日期必须在当前时间之后 | 适用于Date 或Calendar 对象 |
@Pattern | 如@Pattern(regexp = "^\\d{3}-\\d{4}-\\d{4}$", message = "格式错误") | 是否符合正则表达式 | 定义自定义格式规则 |
可通过@Pattern
注解定义自定义正则表达式,实现对字段格式的更精细控制
示例:
```java@Pattern(regexp = "^\\d{3}-\\d{4}-\\d{4}$", message = "文件格式不正确")private String fileFormat;```默认提示信息分为英文和中文版本,英文提示信息来源于Hibernate Validator的默认提示,中文提示信息需单独配置
图片1:Hibernate Validator提示信息配置
推荐在Controller层配置全局异常处理类,统一处理MethodArgumentNotValidException
异常
private int code;private String msg;BizCodeEnum(int code, String msg) { this.code = code; this.msg = msg;}public int getCode() { return code;}public String getMsg() { return msg;}
}
图片2:全局异常捕获配置
8、配置依赖关系
确保在Spring Boot项目中配备了Hibernate Validator相关依赖
```xmlorg.springframework.boot spring-boot-starter-validation
JSR303规范为后端校验提供了统一的标准,Hibernate Validator是实现JSR303校验的最佳选择。推荐在Controller层开启校验,结合BindingResult
接收校验结果,并通过全局异常捕获统一处理校验失败的情况。
转载地址:http://lprrz.baihongyu.com/