import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.ReflectUtil;
import org.springframework.validation.*;
import org.springframework.validation.annotation.Validated;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.lang.reflect.Field;
public class ValidateDemo {
public static void main(String[] args) {
Validator validator = new Validator() {
@Override
public boolean supports(Class<?> clazz) {
return clazz.isAnnotationPresent(Validated.class);
}
@Override
public void validate(Object target, Errors errors) {
DirectFieldBindingResult result = (DirectFieldBindingResult) errors;
for (Field field : target.getClass().getDeclaredFields()) {
if (field.isAnnotationPresent(NotNull.class)) {
NotNull annotation = field.getAnnotation(NotNull.class);
Object fieldValue = ReflectUtil.getFieldValue(target, field);
if (fieldValue == null) {
result.addError(new FieldError(target.getClass().getSimpleName(), field.getName(), annotation.message()));
}
}
if (field.isAnnotationPresent(NotEmpty.class)) {
NotEmpty annotation = field.getAnnotation(NotEmpty.class);
Object fieldValue = ReflectUtil.getFieldValue(target, field);
if (ObjectUtil.isEmpty(fieldValue)) {
result.addError(new FieldError(target.getClass().getSimpleName(), field.getName(), annotation.message()));
}
}
}
}
};
A a = new A(100);
DirectFieldBindingResult result = new DirectFieldBindingResult(a, "a");
validator.validate(a, result);
if (result.hasErrors()) {
for (ObjectError error : result.getAllErrors()) {
FieldError fieldError = (FieldError) error;
System.out.println(fieldError.getObjectName() + ":" + fieldError.getField() + ":" + fieldError.getDefaultMessage());
}
}
}
@Validated
static class A {
@NotNull
private Integer id;
@NotEmpty
private String name;
public A(Integer id) {
this.id = id;
}
}
}
Spring使用自定义Validator校验器对字段进行校验
最新推荐文章于 2024-06-29 22:05:03 发布