SpringBoot自定义校验注解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringBoot自定义校验注解相关的知识,希望对你有一定的参考价值。

参考技术A 系统执行业务逻辑之前,会对输入数据进行校验,检测数据是否有效合法的。所以我们可能会写大量的 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 接口的返回及日志打印如下

以上是关于SpringBoot自定义校验注解的主要内容,如果未能解决你的问题,请参考以下文章

springBoot参数联合校验,自定义分组校验

SpringBoot Validation参数校验 详解自定义注解规则和分组校验

Springboot之自定义校验注解

SpringBoot自定义注解实现Token校验

SpringBoot分组校验及自定义校验注解

SpringBoot系列之自定义枚举类的数据校验注解