Springboot自定义注解验证时,获取当前验证字段的字段名称

2022-02-01 / 13 阅读 / Java
Springboot自定义注解验证时,获取当前验证字段的字段名称
为了在验证后能准确定位具体的字段,好快速排查问题

直接看代码


public class SelectValidator implements ConstraintValidator<Select, String> {

    @Override
    public void initialize(Select constraintAnnotation) {
        ...
    }

    @Override
    public boolean isValid(String o, ConstraintValidatorContext constraintValidatorContext) {
        // 此处获取字段名称
        String fieldName = "";
        if (constraintValidatorContext instanceof ConstraintValidatorContextImpl) {
            ConstraintValidatorContextImpl validatorContext = (ConstraintValidatorContextImpl) constraintValidatorContext;
            if (validatorContext.getConstraintViolationCreationContexts() != null
                    && validatorContext.getConstraintViolationCreationContexts().size() > 0
                    && validatorContext.getConstraintViolationCreationContexts().get(0).getPath() != null) {
                fieldName = validatorContext.getConstraintViolationCreationContexts().get(0).getPath().asString();
            }
        }
        // 模拟检测出错误,指出具体的字段和错误信息
        String message = String.format(Locale.CHINESE, "[%s]指定选项组 [%s] 中,未找到指定选项值(%s)!", fieldName, String.join(",", select), o);
        constraintValidatorContext.buildConstraintViolationWithTemplate(message).addConstraintViolation();
        return false;
    }
}
相关推荐