一、前言
在项目中,某些情景下我们需要验证编码是否重复,账号是否重复,身份证号是否重复等...
而像验证这类代码如下:
那么有没有办法可以解决这类似的重复代码量呢?
我们可以通过自定义注解校验的方式去实现,如下 在实体类上面加上自定义的注解 @FieldRepeatValidator(field = "resources", message = "菜单编码重复!")
即可
下面就先来上代码吧~
二、实现
基本环境:
- -api
- -validator
在SpringBoot环境中已经自动包含在spring-boot-starter-web
中了,如果因为版本导致没有,可去maven仓库搜索手动引入到项目中使用
小编的springboot版本为: 2.1.7
<dependency>
<groupId></groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
[注:小编是基于MyBatis-Plus
的架构下实现的,其他架构略不同,本文实现方式可做参考]
1、自定义注解 @FieldRepeatValidator
// 元注解: 给其他普通的标签进行解释说明 【@Retention、@Documented、@Target、@Inherited、@Repeatable】
@Documented
/**
* 指明生命周期:
* 注解只在源码阶段保留,在编译器进行编译时它将被丢弃忽视。
* 注解只被保留到编译进行的时候,它并不会被加载到 JVM 中。
* 注解可以保留到程序运行的时候,它会被加载进入到 JVM 中,所以在程序运行时可以获取到它们。
*/
@Retention()
/**
* 指定注解运用的地方:
* ElementType.ANNOTATION_TYPE 可以给一个注解进行注解
* 可以给构造方法进行注解
* 可以给属性进行注解
* ElementType.LOCAL_VARIABLE 可以给局部变量进行注解
* 可以给方法进行注解
* 可以给一个包进行注解
* 可以给一个方法内的参数进行注解
* 可以给一个类型进行注解,比如类、接口、枚举
*/
@Target({, , })
@Constraint(validatedBy = )
//@Repeatable()(可重复注解同一字段,或者类,java1.8后支持)
public @interface FieldRepeatValidator {
/**
* 实体类id字段 - 默认为id (该值可无)
* @return
*/
String id() default "id";;
/**
* 注解属性 - 对应校验字段
* @return
*/
String field();
/**
* 默认错误提示信息
* @return
*/
String message() default "字段内容重复!";
Cla