我试图通过跳过尽可能多的数据库命中来优化 Spring 表单验证。这是我拥有的示例验证器:
import org.springframework.validation.Errors;
import org.springframework.validation.ValidationUtils;
import org.springframework.validation.Validator;
import com.my.Car;
public class CarValidator implements Validator {
@Override
public boolean supports(Class<?> c) {
return c.equals(Car.class);
}
@Override
public void validate(Object car, Errors result) {
ValidationUtils.rejectIfEmptyOrWhitespace(result, "seats", "NotEmpty.car.seats");
ValidationUtils.rejectIfEmptyOrWhitespace(result, "colour", "NotEmpty.car.colour");
// hitting the database here
}
}
如果前两个验证中的一些验证失败,我不想访问数据库。如果席位或颜色字段为空,则停止处理验证并返回到控制器。但是如果所有的验证都通过了,点击数据库然后做剩下的。就像大多数语言中 AND 的短路评估一样。