美文网首页spring boot 技术干货
hibernate validator 自定义注解详解

hibernate validator 自定义注解详解

作者: 一只啃楠木的鱼 | 来源:发表于2019-02-28 16:14 被阅读8次

话不多说 纯干货

新建一个自定义注解 MyConstraint


//注解的作用域可以在很多地方 这里可以放在方法和属性上
@Target({ElementType.METHOD, ElementType.FIELD})
//基于运行时的注解
@Retention(RetentionPolicy.RUNTIME)
//javax validation标准校验器  括号里的类表示当前这个属性需要用什么类去进行校验(该类中包含校验逻辑)
@Constraint(validatedBy = MyConstraintValidator.class)
public @interface MyConstraint {

       /**
        * 这三个属性是hibernate validator中其他注解都包括的 我们也写上 但这里只用到message
        * @return
        */
       String message();
   
       Class<?>[] groups() default { };

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

}

新建一个类 MyConstraintValidator

/**
 * 这里必须要实现ConstraintValidator接口 只要实现了此接口 spring就会接管该类的创建
 * 第一个参数MyConstraint 表示要实现的注解是什么
 * 第二个参数Object 表示该注解可以作用在哪些需要被验证的类型上
 */
public class MyConstraintValidator implements ConstraintValidator<MyConstraint, Object> {

        /**
         * 这里可以注入一些需要判断逻辑的服务类
         */
        @Autowired
        private XXX xxx;
    
        @Override
        public void initialize(MyConstraint constraintAnnotation) {
                System.out.println("我被初始化了");
        }

        @Override
        public boolean isValid(Object value, ConstraintValidatorContext context) {
                //xxx 执行某些方法 然后进行逻辑判断 最后返回true或者false
                return true;
        }

}

以上的注解用法就不多做介绍了

这里附加一点在web层的简单用法

@PostMapping("/login")
    public Rsp login(@Valid @RequestBody LoginInfo loginReq, BindingResult result) {
        Rsp rsp = new Rsp();
        if (result.hasErrors()) {
            return rsp.fail(result.getFieldError().getDefaultMessage());
        }
        ...
        ...
        ...
    }


相关文章

网友评论

    本文标题:hibernate validator 自定义注解详解

    本文链接:https://www.haomeiwen.com/subject/sxfkuqtx.html