自定义校验注解

DBC 181 0

开发自定义注解实现——如果传参里面包含有 “猪头” 就跳出!

一、实体类——TbUserDO

点击查看完整内容

二、配置自定义注解

package com.example.test05.demo.config;

import javax.validation.Constraint;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import javax.validation.Payload;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * @author DBC
 * @date 2022/7/11 16:35
 * @network dbc655.top
 */
@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = DbcConstraint.DbcConstraintValidator.class)
public @interface DbcConstraint {
    String message() default "参数错误";

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};

    class DbcConstraintValidator implements ConstraintValidator<DbcConstraint, Object> {
        @Override
        public void initialize(DbcConstraint myConstraint) {
            //初始化的时候
            System.out.println("正在初始化");
        }

        @Override
        public boolean isValid(Object o, ConstraintValidatorContext constraintValidatorContext) {
            //这里写判断逻辑
            String name = (String) o;

            return !name.contains("猪头");
        }
    }
}

三、直接调用即可

    @PostMapping("xinzeng")
    public JsonData xinzeng(@RequestBody @Validated TbUserDO userDO) {
        
        JsonData jsonData = tbUserService.xinzeng(userDO);
        return jsonData;
    }

四、结果返回

{
    "code": -1,
    "data": "2022-07-11 17:03:19",
    "msg": "名字里面不能有猪头!"
}
解析
  • @Retention :用来说明该注解类的生命周期。它有以下三个参数:
    • RetentionPolicy.SOURCE : 注解只保留在源文件中
    • RetentionPolicy.CLASS : 注解保留在class文件中,在加载到JVM虚拟机时丢弃
    • RetentionPolicy.RUNTIME : 注解保留在程序运行期间,此时可以通过反射获得定义在某个类上的所有注解。
  • @Target : 用来说明该注解可以被声明在那些元素之前:
    • ElementType.TYPE:说明该注解只能被声明在一个类前。
    • ElementType.FIELD:说明该注解只能被声明在一个类的字段前。
    • ElementType.METHOD:说明该注解只能被声明在一个类的方法前。
    • ElementType.PARAMETER:说明该注解只能被声明在一个方法参数前。
    • ElementType.CONSTRUCTOR:说明该注解只能声明在一个类的构造方法前。
    • ElementType.LOCAL_VARIABLE:说明该注解只能声明在一个局部变量前。
    • ElementType.ANNOTATION_TYPE:说明该注解只能声明在一个注解类型前。
    • ElementType.PACKAGE:说明该注解只能声明在一个包名前。
  • @Constraint来限定自定义注解的方法
    • 这里写的类是下面自定义的类

发表评论 取消回复
表情 图片 链接 代码

分享