JSR303统一校验使用
JSR303也称为bean validation,定义了一套bean验证规范。通过注解的方式关联属性与规则
使用方式
1.引入依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> </dependency>
2.常用注解
@Null
:验证对象是否为null。@NotNull
:验证对象是否不为null,但无法检查长度为0的字符串。@NotBlank
:检查约束字符串是否不为Null且被Trim后的长度大于0,只对字符串有效,且会去掉前后空格。@NotEmpty
:检查约束元素是否为NULL或者是EMPTY。@AssertTrue
和@AssertFalse
:分别验证Boolean对象是否为true或false。@Size(min=, max=)
和@Length(min=, max=)
:验证对象(如Array, Collection, Map, String)的长度或字符串的长度是否在给定范围之内。@Past
和@Future
:验证Date和Calendar对象是否在当前时间之前或之后。@Pattern
:验证String对象是否符合正则表达式的规则。
3.在bean的成员变量上引用注解。
4.抛出的方法为MethodArgumentNotValidException,因此需要在统一抛出异常时将其加入@controlleradvice
@ResponseBody @ExceptionHandler(MethodArgumentNotValidException.class) @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) public RestErrorResponse methodArgumentNotValidException(MethodArgumentNotValidException e){ BindingResult bindingResult = e.getBindingResult(); List<String>errList=new ArrayList<>(); bindingResult.getFieldErrors().forEach(item->{ errList.add(item.getDefaultMessage()); }); String errors = StringUtils.join(errList, ","); log.error("系统异常{}",errors); return new RestErrorResponse(errors); }
5.在controller中对相应的参数引入注解@Validated
6.如果我的新增和更新的时候同时使用了一个bean,但是他们的验证要求不一样,我该怎么做:
JSR303提供了分组校验的方法,
- 首先定义分组接口
public class ValidationGroups { public interface Insert{}; public interface Delete{}; public interface Update{}; }
- 成员变量上的注解需要额外添加group变量来标注当前注解具体属于哪一分组
@NotEmpty(message = "新增课程名称不能为空",groups = {ValidationGroups.Insert.class}) @NotEmpty(message = "修改课程名称不能为空",groups = {ValidationGroups.Update.class}) @ApiModelProperty(value = "课程名称", required = true) private String name;
- 在@Validated中表明当前使用的是哪一种接口方案
@RequestBody @Validated(ValidationGroups.Insert.class) AddCourseDto addCourseDto
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现