美文网首页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