我正在按照教程向大家展示如何使用Spring MVC
框架构建一个可以验证的简单表单。
我们创建了一个使用RequestMapping
注释的函数,然后将@Valid
作为注释添加到此函数的第一个参数旁边@ModelAttribute
注释。让我们调用第一个参数类型ClassA
。
现在在ClassA
我们使用hibernate
验证注释注释了一些属性(例如@NotNull
,@Pattern
等等。)
我想要了解的是这一切是如何工作的?
我检查了@interface NotNull
的代码,例如它确实没有做任何事情。
我假设spring MVC
框架使用反射来检测RequestMapping
函数的第一个参数是否使用Valid
进行注释,然后在提交表单时调用{{ 1}}验证SOMETHING
属性。
ClassA
在哪里?它处于休眠状态吗?代码请问... SOMETHING
如何调用Spring
代码,我们刚刚将hibernate
hibernate
添加到项目中,但我们没有说过{{1}使用它们。
另外,将jars
绑定到休眠状态的规范是什么?
某人是否是简单的术语并且使用高级别(如果可能的话,可以使用代码参考)向我解释事情是如何运作的?
我对此非常陌生,来自C ++,其中的事情完全不同。我试图了解Spring
的工作背后的机制。
答案 0 :(得分:0)
你所看到的是Spring对JSR-303 Bean Validation API的支持。那些注释(例如@Pattern
,javax.validation.*
都是此JSR的一部分。由于这只是一个JSR(基本上,JSR只是一组接口),它需要一个具体的实现才能实际工作(称为提供者)。这是hibernate在图片中出现的地方。 Hibernate拥有JSR-303的实现,称为hibernate-validator
。此API与Hibernate的核心ORM功能无关。事实上,这个API是JSR-303的reference implementation,这就是为什么在documentation中你会看到它被用作默认提供者。
作为Spring框架的用户,您需要知道的是Spring需要在类路径中找到JSR-303的实现,以便您可以从{{1}}包中开始使用这些注释。