自定义校验注解ConstraintValidator

自定义注解

package com.nobody.annotation;
 
import com.nobody.validator.isleekvalidator;
 
import javax.validation.constraint;
import javax.validation.payload;
import java.lang.annotation.*;
 
@retention(retentionpolicy.runtime)
@target(elementtype.field)
@documented
@constraint(validatedby = isleekvalidator.class) // 指定我们自定义的校验类
public @interface isleek {
 
    /**
     * 是否强制校验
     *
     * @return 是否强制校验的boolean值
     */
    boolean required() default true;
 
    /**
     * 校验不通过时的报错信息
     *
     * @return 校验不通过时的报错信息
     */
    string message() default "校验错误!";
 
    /**
     * 将validator进行分类,不同的类group中会执行不同的validator操作
     *
     * @return validator的分类类型
     */
    class<?>[] groups() default {};
 
    /**
     * 主要是针对bean,很少使用
     *
     * @return 负载
     */
    class<? extends payload>[] payload() default {};
 
}

实现自定义注解

package com.nobody.validator;
 
import com.nobody.annotation.isleek;
import org.springframework.util.stringutils;
 
import javax.validation.constraintvalidator;
import javax.validation.constraintvalidatorcontext;
 
public class isleekvalidator implements constraintvalidator<isleek, string> {
 
    // 是否强制校验
    private boolean required;
 
    @override
    public void initialize(isleek constraintannotation) {
        this.required = constraintannotation.required();
    }
 
    @override
    public boolean isvalid(string name, constraintvalidatorcontext constraintvalidatorcontext) {
        if (required) {
            return !stringutils.isempty(name) && name.startswith("hello");
        }
        return false;
    }
}

使用自定义注解

package com.nobody.dto;
 
import com.nobody.annotation.isleek;
import lombok.data;
 
import javax.validation.constraints.*;
 
@data
public class userdto {
 
    @notblank(message = "姓名不能为空")
    @isleek // 我们自定义的注解
    private string name;
 
    @min(value = 18, message = "年龄不能小于18")
    private int age;
 
    @notempty(message = "邮箱不能为空")
    @email(message = "邮箱格式不正确")
    private string email;
}

写个接口,模拟用户开户业务,调用测试。注意,记得加上@valid注解开启校验,不然不生效。
如果参数校验不通过,会抛出methodargumentnotvalidexception异常。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值