在 JSR-303(Bean Validation)中,您需要为您编写的每个约束验证器定义一个特殊的注解。@Max
如果您正在创建可重用的约束验证器(如标准、@NotNull
等) ,这非常有意义。
然而在现实生活中,每个经过验证的 bean 都需要自己的验证器来进行更复杂的业务验证。使用 vanilla JSR-303 实现,您必须为每个验证器创建单独的注释。这迫使开发人员编写一次性注释,并使 bean 验证的整体概念看起来很愚蠢。如果 JSR-303 提供某种委托约束注释,则可以避免一次性注释的必要性:@ValidateBy(validator=my.custom.Validator)
.
现在我的问题:
- 为什么 JSR-303 不包含这样的用例?
- 是否有任何与此相关的官方讨论(我找不到任何东西)?
- 是否有任何 JSR-303 库提供这样的功能(不是说很难实现)?
更新 1 - 特定用例(导致这个问题)
我们有一个适度的企业应用程序,具有相当丰富的业务模型(40 个可管理实体、20 个可嵌入实体、25 个只读实体)。这意味着我们有很多 HTML 表单。每个表单都由带有 JSR-303 注释的指定表单 bean(70 个表单 bean)支持。某些表单需要自定义的重要验证(例如,如果交付类型是电子邮件,则必须设置联系电子邮件,...)。使用 JSR-303,我们有 33 个特定于 form-bean 的验证器,带有 33 个(不必要的一次性)注释。
由于 Java 类的数量(实体、控制器、DAO、DTO、映射器、验证器等......现在这会产生 800 个.java
文件),我不喜欢有任何样板代码。