轻轻松松搞定--SpringBoot之自定义注解和自定义验证器validation

SpringBoot之自定义注解和自定义验证器validation

步骤一:创建实体类User

@Data
@Component
public class User {

private String userId;
private String username;
private String password;
private int age;//下面会自定义一个验证最小年龄的注解类

}

步骤二:自定义注解MinAge

弱弱的说明:

注解的类的定义写法这里就不详解了,想必各位大佬都知道,小弟我就不献丑了,不清楚的可以花两分钟,网上搜一下,不难,这里也简单说明一下:

  1. 注解类用@interface修饰
  2. 注解类上面有四个注释
    — @Inherited 注解是都可以被继承
    — @Rentention 注解的生命周期,有三个,这里是Runtime运行时,生命周期最长
    — @Documented 文档注释,用语输出文档
    — @Target 表明注释使用的位置
    . ElementType.TYPE–>类名上
    . ElementType.FIELD–>属性上
    . ElementType.METHOD–>方法上
    — @Constraint //这里最重要,用语关联自定义的验证器,是注解生效

划重点了Constarint注解的validateBy 属性值 要写 自定义的验证器.calss
我这里是validateBy=MinAgeValidator.class

  1. 创建value属性,注意后面要加(),还可以设置默认值,用关键字default
  2. 创建message属性,用语提示错误信息
  3. 其他的属性可写可不写,这样一个基本的注解类就搞定了

@Inherited
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE,ElementType.FIELD,ElementType.METHOD})
@Documented
@Constraint(validatedBy = MinAgeValidator.class)
public @interface MinAge {

public int value() default 18;

public String message() default “”;

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

}

步骤三:自定义关联验证器MinAgeValidator

弱弱的说明:

  1. 自定义的验证器MinAgeValidator实现ConstraintValidator接口
  2. 接口的类型,第一个参数是自定义的注解(这里是MinAge),第二个参数是需要验证的实体类的属性的类型(这里是Integer)
  3. 复写接口的两个方法 --initialize() --isValid()
  4. 第一个初始化方法可以写,可以不写,根据需求来决定
  5. 第二个isValid方法是逻辑验证方法,返回结果是true,验证通过,或者放行不验证,返回结果是false,则验证失败
  6. isValid方法的两个参数,第一个就是要验证的实体类(user)的年龄age,第二个
    参数可以不用管,逻辑验证只要处理第一个参数就行
    测试的时候,第二个参数context 设置为null就行

@Component
public class MinAgeValidator implements ConstraintValidator<MinAge,Integer> {

private Integer min;

//初始化
@Override
public void initialize(MinAge constraintAnnotation) {

//获取MinAge注解的value属性值,并赋予this.min
this.min = constraintAnnotation.value();
System.out.println(“min:”+min);

}

@Override
public boolean isValid(Integer value, ConstraintValidatorContext context) {

//如果age不为空,则与注解value属性值比较,如果大于注解的value值,则验证通过
if(value!=null){
return value>=min;
}
//如果值是空,则不验证放行
return true;
}

}

步骤四:将注解标注在实体类上

@Data
@Component
public class User {

private String userId;
private String username;
private String password;
@MinAge(value=88)
private int age;//下面会自定义一个验证最小年龄的注解类

}

怎么样?

不怎么样(哭)

是不是很简单?

你猜(白眼)

赶紧搞起来!

肾不太好(六味地黄丸)

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值