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自定义校验注解的主要内容,如果未能解决你的问题,请参考以下文章