正文
参数校验这个东西,很多情况下都是比较简单的,用
@NotNull
、
@Size
等注解就可以解决绝大多数场景,但也有一些场景是这些基本注解解决不了的,只能用一些其他的方式处理,这样就导致参数校验变成了多层,其实是不利于代码维护的。
于是乎,我写了一套几乎可以满足任何场景的参数校验组件,非常好用,安利给大家。
-
枚举值字段校验:
@SpelAssert(assertTrue = " T(cn.sticki.enums.UserStatusEnum).getByCode(#this.userStatus) != null ", message = "用户状态不合法")
private Integer userStatus;
-
多字段联合校验:
@NotNull
private Integer contentType;
@SpelNotNull(condition = "#this.contentType == 1", message = "语音内容不能为空")
private Object audioContent;
@SpelNotNull(condition = "#this.contentType == 2", message = "视频内容不能为空")
private Object videoContent;
-
复杂逻辑校验,调用静态方法:
// 中文算两个字符,英文算一个字符,要求总长度不超过 10
// 调用外部静态方法进行校验
@SpelAssert(assertTrue = "T(cn.sticki.util.StringUtil).getLength(#this.userName) <= 10", message = "用户名长度不能超过10")
private String userName;
-
调用 Spring Bean(需要使用 @EnableSpelValidatorBeanRegistrar 开启Spring Bean支持):
// 这里只是简单举例,实际开发中不建议这样判断用户是否存在
@SpelAssert(assertTrue = "@userService.getById(#this.userId) != null", message = "用户不存在")
private Long userId;
-
基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能
-
项目地址:https://github.com/YunaiV/ruoyi-vue-pro
-
视频教程:https://doc.iocoder.cn/video/
-
强大的参数校验功能,几乎支持所有场景下的参数校验。
-
扩展自 javax.validation 包,只新增不修改,无缝集成到项目中。
-
基于 SpEL(Spring Expression Language) 表达式,支持复杂的校验逻辑。
-
支持调用 Spring Bean,可在表达式中使用注入过的 Spring Bean。
-
-
支持自定义校验注解,可根据业务需求自定义校验逻辑。
-
无需额外的异常处理,校验失败时会上报到 javax.validation 的异常体系中。
-
简单易用,使用方式几乎与 javax.validation 一致,学习成本低,上手快。
基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能
-
项目地址:https://github.com/YunaiV/yudao-cloud
-
视频教程:https://doc.iocoder.cn/video/
目前仅测试了 JDK8 环境,理论上来说 JDK8+ 应该都是支持的。
-
添加依赖
Latest Version: 0.0.2-beta
<dependency>
<groupId>cn.stickigroupId>
<artifactId>spel-validatorartifactId>
<version>Latest Versionversion>
dependency>
<dependency>
<groupId>org.hibernate.validatorgroupId>
<artifactId>hibernate-validatorartifactId