• springboot~自定义valid及DefaultGroupSequenceProvider的作用


    spring一切都可以基于注解来实例,像缓存,校验,字段映射,动态代理等等,今天主要说一下自定义的校验及校验的组关联。

    • 自定义注解,判断name需要以"管理员"结尾
    @Target(ElementType.FIELD)
    @Retention(RetentionPolicy.RUNTIME)
    @Constraint(validatedBy = PrefixAdminValidator.class)
    @Documented
    public @interface PrefixAdmin {
        String message() default "必须以'角色'结尾";
        //这两个属性必须有
        Class<?>[] groups() default {};
        Class<? extends Payload>[] payload() default {};
    }
    @Component
    public class PrefixAdminValidator implements ConstraintValidator<PrefixAdmin, String> {
    
        @Override
        public void initialize(PrefixAdmin constraintAnnotation) {
        }
    
        @Override
        public boolean isValid(String value, ConstraintValidatorContext context) {
            return value.endsWith("角色");
        }
    }
    
    • 然后有个需求,只有字段manager为true时,才进行PrefixAdminValidator的校验,这时我们可以通过DefaultGroupSequenceProvider组依赖来实现
    /**
     * 校验的依赖,当isManager为true为,PrefixAdmin注解才有效.
     */
    public class RoleProvider implements DefaultGroupSequenceProvider<RoleDTO> {
        @Override
        public List<Class<?>> getValidationGroups(RoleDTO object) {
            List<Class<?>> defaultGroupSequence = new ArrayList<>();
    
            defaultGroupSequence.add(RoleDTO.class); //注意这里不要写错
            if (object != null && object.isManager()) {
                defaultGroupSequence.add(RoleDTO.CheckManagerGroup.class);
            }
            return defaultGroupSequence;
        }
    }
    
    • 实体在字段上添加对接的注解
    @Data
    @GroupSequenceProvider(RoleProvider.class)
    @ApiModel("角色DTO")
    public class RoleDTO {
        private String id;
    
        @PrefixAdmin(groups = CheckManagerGroup.class)
        private String name;
    
        private boolean manager;
    
        public interface CheckManagerGroup {
        }
    }
    
    • 测试数据
    • 结果响应
    {
        "code": 400,
        "message": "name必须以'角色'结尾",
        "data": null
    }
    
  • 相关阅读:
    Go网络文件传输
    Go网络编程
    LNMP环境搭建(PHP7.4.0)
    LNMP环境搭建(PHP7.2.25)
    Please ensure the argon2 header and library are installed
    MySQL权限管理
    nginx ingress controller配置默认SSL证书
    kubernetes pod内抓包,telnet检查网络连接的几种方式
    ansible取出register变量中最长字符串
    kubernetes flannel pod CrashLoopBackoff解决
  • 原文地址:https://www.cnblogs.com/lori/p/16198622.html
Copyright © 2020-2023  润新知