SpringBoot自定义校验注解
发布网友
发布时间:2022-12-05 10:11
我来回答
共1个回答
热心网友
时间:2023-12-22 03:00
系统执行业务逻辑之前,会对输入数据进行校验,检测数据是否有效合法的。所以我们可能会写大量的 if else 等判断逻辑,特别是在不同方法出现相同的数据时,校验的逻辑代码会反复出现,导致代码冗余,阅读性和可维护性极差。
Hibernate框架中有一个组件 hibernate-validator 专门用于数据校验,在平常的Spring项目中虽然数据层不使用Hibernate做 ORM 框架,但是 hibernate-validator 也经常被集成来做数据校验。
下面我们写一个用于 URL 校验的注解,实现一个简单的网站信息管理的 URL 校验,做校验的方式我们也使用现成的apache工具包中提供的校验工具。
校验注解
校验类
校验类需要实现 ConstraintValidator 接口,第一个泛型为注解,第二个为校验的数据类型。
实现这个接口必须要重写 isValid() 方法,在其中实现主要的校验逻辑。
创建 Insert 、 Update 分组别用于区分和开启校验
用于分组的类需要继承 javax.validation.groups.Default 接口
创建一个 WebSite 类,对其中 url 、 alternateUrl 进行校验,这个字段分别属于 Insert 分组、 Update 分组的时候进行字段校验。
具体校验方式如下,在insert接口对 Insert 分组进行校验,也就是校验 url 属性,在updateAlternate接口对 Update 分组进行校验,也就是对 alternateUrl 字段进行校验。
若校验不通过,代码会抛出 MethodArgumentNotValidException 异常,我们实现一个统一异常处理类来处理这个异常报错,并返回校验提示信息。
使用http工具调用接口,返回相关信息
首先使用一个错误的 url 参数调用 insert 接口,校验不通过,但是调用 updateAlternate 接口可以通过。
调用 insert 接口的返回及日志打印如下