我编写了一个自定义验证注释和ConstraintValidator
实现,它使用Spring Service(并执行数据库查询):
public class MyValidator implements ConstraintValidator<MyValidationAnnotation, String> {
private final MyService service;
public MyValidator(MyService service) {
this.service = service;
}
@Override
public void initialize(MyValidationAnnotation constraintAnnotation) {}
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
return service.exists(value);
}
}
它的使用方式如下:
public class MyEntity {
@Valid
List<Foo> list;
}
public class Foo {
@MyValidationAnnotation
String id;
}
这非常好用,但 service.exists(value)
正在为list
中的每个项目调用,这是正确的,但可以/应该进行优化。
在验证MyEntity
的实例时,我想缓存 service.exists(value)
次调用的结果。
我不想要使用static HashMap<String, Boolean>
,因为这会缓存整个应用程序生命周期的结果。
是否可以访问某种约束验证上下文,该上下文仅在此特定验证运行时存在,因此我可以将缓存结果放在那里?
或者您有其他解决方案吗?
提前致谢!
答案 0 :(得分:0)