动态设置@Constraint验证器 - Spring Boot

Dynamically set validator for @Constraint - Spring Boot

提问人:Anton 提问时间:8/24/2023 最后编辑:Anton 更新时间:8/24/2023 访问量:67

问:

问题很简单 - 是否可以基于Spring Boot应用程序中的属性,例如一个标志,以动态/编程方式为javax.validation.@Constraint设置验证器?

我的尝试是将一个自定义 Validator 声明为接口,它扩展了 ConstraintValidator,然后有 2 个特定的类实现它,每个类都有自己的验证方法。要验证的类型相同。但它不允许我对接口和抽象类这样做 - 看起来@Constraint只接受可以立即实例化的类。

我也没有找到任何这种方法的例子。

知道这是否可能吗?

java spring-boot 验证 hibernate-validator

评论

0赞 Slevin 8/24/2023
你为什么不在内部决定是验证一种方式还是另一种方式呢?public boolean isValid(...)
1赞 M. Deinum 8/24/2023
不,你不能。您可以在实际的验证器中确定它,并委托给您需要的验证器。
0赞 Slevin 8/24/2023
@M.Deinum 既然你是这里的专业人士之一,我可以请你提供一个简短的代码示例,说明你将如何做到这一点,因此最好和防弹的方式^^。我只是做一个简单的如果-否则的决定,但我是谁来告诉你路......
1赞 Slevin 8/24/2023
当 M.Deinum 说这是不可能的时,那就没有办法了。有时你必须顺应宇宙愿意给予的东西......
2赞 M. Deinum 8/24/2023
注解需要静态元数据,一些注解(主要是来自Spring的注解)可以在值中包含值表达式或SpEL表达式。但是,约束注解不受 Spring 的控制(即使您将其设为组件,它也不在 Spring 的控制之下!),因此您不能在这些注解中使用值或 SpEL 表达式。只有实际的类名。你可以让 Spring 控制验证器的实例并在那里进行路由,要么使用 if 语句,要么使用规则注册要使用的验证器,然后让另一个注入它。@Conditional

答: 暂无答案