WJP
919497158@qq.com
自定义Valida验证注解

自定义注解

@Target({ElementType.METHOD,ElementType.FIELD}) //注解作用域
@Retention(RetentionPolicy.RUNTIME) //注解作用时间
@Constraint(validatedBy = MyConstriantValidator.class) //执行校验逻辑的类
public @interface MyConstraint {//校验不过时候的信息
String message() default "{org.hibernate.validator.constraints.NotBlank.message}";

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

Class<? extends Payload>[] payload() default {};
}
复制代码

有了注解之后,就需要一个验证器来实现验证逻辑:

@Slf4j
public class MyConstriantValidator implements ConstraintValidator<MyConstraint,Object> {  //两个泛型分别为自定义注解和要校验的类型
    @Autowired  //可自由注入Spring工厂的bean
    private HelloService helloService;
 
    /**
     * 初始化
     */
    @Override
    public void initialize(MyConstraint myConstraint) {
        log.info("my validator init");
    }
 
    /**
     * 校验逻辑
     * @param o  //校验的参数
     */
    @Override
    public boolean isValid(Object o, ConstraintValidatorContext constraintValidatorContext) {
        String value = helloService.sayHellp(o.toString());
        log.info(value);
        return false;
    }
}
 
复制代码
https://blog.csdn.net/weixin_34381687/article/details/88001808

自定义参数校验要确认 子对象一定也要加@Valid注解,否则校验不生效,如
Request<List<ImportErrorInfo<xxVO>>> request,其中ImportErrorInfo对象为

public class ImportErrorInfo implements Serializable {

    private static final long serialVersionUID = -2583765791919515566L;

    private Integer type;

    @Valid
    private transient T data;
}

此处子对象需要加注解 否则校验不生效


自定义注解验证其除了用@Valid开启验证外,还可以手动启动验证其进行校验

Validator validator = HibernateValidator.getValidator();
Set<ConstraintViolation<VO>> errorSet = validator.validate(VO);
if (errorSet != null && !errorSet.isEmpty()) {
    for (ConstraintViolation<VO> violation : errorSet) {
        System.out.println(violation.getMessage());
    }
}

1、接口数据校验发生在@Valid注解
2、Excel解析数据手动数据校验发生在 数据映射完成后,因此,数据类型错误时在数据解析(映射)时便会报错

wjp

文章作者

发表评论

textsms
account_circle
email

自定义Valida验证注解
自定义注解 @Target({ElementType.METHOD,ElementType.FIELD}) //注解作用域 @Retention(RetentionPolicy.RUNTIME) //注解作用时间 @Constraint(validatedBy = MyConstriantValidator.…
扫描二维码继续阅读
2021-02-22