java - Spring 是否生成验证代码?

标签 java spring spring-mvc annotations

最近我试图了解spring如何处理@Valid注解。例如,看看以下 Controller 的方法:

@RequestMapping(value = "/create", method = RequestMethod.POST)
public ModelAndView createEmployee(@Valid EmployeeForm form, Errors errors) {
    if(errors.hasErrors()) {
         //validation errors
    }
    //method code
}

我正在努力理解 errors 实例如何实时填充验证错误。 Spring在 Controller 编译期间是否会在createEmployee方法的开头注入(inject)负责验证的代码?如果是这样,这段代码会是什么样子?

我确实试图找到一个例子来说明如何在现实生活中执行此验证,但这是不可能的。请帮助我。

最佳答案

一切都发生在运行时。请参阅reference有关进行验证的更多详细信息或 this post以获得额外的解释。

基本上,这是 Spring 内部工作方式的一部分。当您启动应用程序时,Spring 会注册一些 bean、bean 处理器,可以扫描您的类路径以查找带注释的类,注册那些找到的带注释的类,为其中一些类构建代理等,并使用它们来构建上下文。

处理请求时,请求在以 DispatcherServlet 开头的某个预定执行路径上进行处理,根据需要从上下文中获取其他 bean 来处理请求(例如验证),然后在 createEmployee 中转发到您的 Controller (它被注册为启动,因为 Spring 在您的 Controller 上找到了您的 @RequestMapping 注释)。当您从该方法返回时,流程将继续构建模型,选择要显示的 View ,然后生成对客户端的响应。

对于您的示例,Spring 基本上会找到 @Valid 注释,查找已配置的 validator (由您配置或由提供的实现(例如 JSR-303)配置),运行 validator 并存储Errors 对象内的验证结果。它在处理请求时执行此操作,如上所述,它不会生成代码。

如果您的问题是确切了解 Spring 是如何做到这一点的,以及所有细节,您可以获取 Spring 源代码并查看/调试它。

关于java - Spring 是否生成验证代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24467092/

相关文章:

java - Spring Boot w/JSP - 找不到 CSS 文件

java - 在 JasperReport 表达式中使用和/或

java - 无法通过 Selenium 和 WebDriver 定位元素

java - Webdriver Java : Using regular expressions - how to insert them?

java - 如何在没有 Spring boot 的情况下创建 Spring sleuth 应用程序

java - Hibernate:没有为实体指定标识符(是的,我已经用@Id装饰了......)

java - Spring中DataBinder和ConversionService的区别

java - 在 Spring 表单中显示 ArrayList

java - 我需要使用 Thymeleaf 为我的 SPRING 应用程序创建绝对 URL

java - 如何将带有 CDI 的 @Alternative 从 WAR 注入(inject)到 EJB 模块中