当前位置: 首页 > 面试题库 >

Spring中@Valid和@Validated之间的区别

牟嘉
2023-03-14
问题内容

Spring支持两种不同的验证方法:Spring验证和JSR-303
bean验证。可以通过定义一个Spring验证程序来使用这两个验证程序,该验证程序委派给其他委托程序,包括bean验证程序。到目前为止,一切都很好。

但是,在注释方法以实际请求验证时,则是另一回事了。我可以这样注释

@RequestMapping(value = "/object", method = RequestMethod.POST)
public @ResponseBody TestObject create(@Valid @RequestBody TestObject obj, BindingResult result) {

或像这样

@RequestMapping(value = "/object", method = RequestMethod.POST)
public @ResponseBody TestObject create(@Validated @RequestBody TestObject obj, BindingResult result) {

在这里,@Valid是javax.validation.Valid,@
Validated是org.springframework.validation.annotation.Validated。后者的文档说

JSR-303的Valid的变体,支持验证组的规范。设计用于方便使用Spring的JSR-303支持,但不适用于JSR-303。

这并没有太大帮助,因为它无法确切说明两者的不同之处。如果有的话。两者似乎都对我来说很好。


问题答案:

正如您在文档中引用的那样,@Validated已添加该功能以支持“验证组”,即,经过验证的bean中的字段组。可以在多步骤表单中使用它,您可以在第一步中验证名称,电子邮件等,然后在后续步骤中验证其他字段。

之所以没有将其添加到@Valid注释中,是因为它使用Java社区流程(JSR-303)进行了标准化,这需要花费时间,Spring开发人员希望允许人们尽快使用此功能。

转到此jira票以查看注释是如何形成的。



 类似资料:
  • 本文向大家介绍Spring中DispatcherServlet和ContextLoaderListener之间的区别,包括了Spring中DispatcherServlet和ContextLoaderListener之间的区别的使用技巧和注意事项,需要的朋友参考一下 ContextLoaderListener为Web应用程序创建根Web应用程序上下文,并将其放在ServletContext中。无论

  • 本文向大家介绍Spring Framework中applicationContext.xml和spring-servlet.xml之间的区别,包括了Spring Framework中applicationContext.xml和spring-servlet.xml之间的区别的使用技巧和注意事项,需要的朋友参考一下 Applicationcontext.xml-这是标准的Spring上下文文件,其中

  • 问题内容: 从Spring Boot还是Spring MVC开始。我已经读过一些东西,但是令人困惑,因为两者看上去很相似。 那么两者之间有什么区别? 问题答案: Spring MVC是一个完整的面向HTTP的MVC框架,该框架由Spring框架管理并基于Servlet。它相当于JavaEE堆栈中的JSF。其中最流行的元素是带有注释的类,你在其中实现可以使用不同的HTTP请求访问的方法。它等效于实现

  • 感谢(在Spring中使用@Valid vs@Validated)以及在Spring中使用@Valid和@Validated之间的差异。我现在明白他们之间的区别了。 然而,我无法理解特定的场景。 我在控制器endpoint中接收到一个整数,我想使用JSR-303进行验证(我只会使用最小值(1)),以确保得到一个整数 困惑-在我将放在控制器类上,尝试后,设置才起作用,但没有起作用。只是想弄明白为什么

  • 问题内容: 我遇到了Spring 3提供的两个注释(@Component和@Configuration),我对它们之间有些困惑。 这是我读到的有关@Component的内容 将此“ context:component”放入bean配置文件中,这意味着在Spring中启用自动扫描功能。基本包指示组件的存储位置,Spring将扫描此文件夹并找出Bean(用@Component注释)并将其注册在Spri

  • 本文向大家介绍Spring Java中Save和SaveAndFlush之间的区别,包括了Spring Java中Save和SaveAndFlush之间的区别的使用技巧和注意事项,需要的朋友参考一下 Save和saveAndFlush均可用于保存实体。它们都属于Spring数据库。保存可能会或可能不会立即将您的更改写入数据库。当我们调用saveAndFlush时,系统将强制您的模型状态与数据库进行