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;
}
}