我的 WebService 基于 Spring 4,并且我正在使用 Hibernate Validator(超越 MethodValidationPostProcessor)。我的问题是我有我的 ClientService 接口(interface)及其实现。因此,我在实现上放置了 Bean Validation 约束,这迫使我将该约束放置在接口(interface)上(抛出 ConstraintDeclarationException
)(或在两者中)。
我想知道两件事:
- 为什么会这样?为什么它强制我在界面上施加所有约束?原因是什么?
- 有什么方法可以将约束仅放在实现中吗?
提前致谢!问候
最佳答案
回答你的第一个问题。该行为在 Bean Validation 规范第 4.5.5 节中指定。 Method constraints in inheritance hierarchies 。基本上,规则是方法的前提条件(由参数约束表示)不得在子类型中得到加强。这就是所谓的Liskov substitution principle 。
回答你的第二个问题,目前没有办法对实现类施加限制。有HV-872建议将这些规则的可配置放宽作为 Hibernate Validator 的特定功能来实现,但尚未实现。
关于java - 如何避免 Hibernate Validator ConstraintDeclarationException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30929255/