百木园-与人分享,
就是让自己快乐。

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
}

作者:仓储大叔,张占岭,
荣誉:微软MVP
QQ:853066980

支付宝扫一扫,为大叔打赏!

springboot~自定义valid及DefaultGroupSequenceProvider的作用


来源:https://www.cnblogs.com/lori/p/16198622.html
本站部分图文来源于网络,如有侵权请联系删除。

未经允许不得转载:百木园 » springboot~自定义valid及DefaultGroupSequenceProvider的作用

相关推荐

  • 暂无文章