Spring 带休眠验证的 MVC 不工作

Spring MVC with hibernate validation doesn't work

我在使用 Spring 进行休眠验证时遇到了一些问题。我按照在线教程中的说明进行了所有操作,但它不起作用,我只是转到下一页而没有验证错误。

import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

public class Customer {

private String firstName;

@NotNull()
@Size(min=1, message = "this field must not to be empty")
private String lastName;

控制器:

@RequestMapping("/processForm")
public String processForm(@ModelAttribute("customer") @Valid Customer 
                          customer, BindingResult bindingResult) {
    if(bindingResult.hasErrors()) {
        return "customer-form";
    }
    return "customer-confirmation";
}

客户-form.jsp

<form:form action="processForm.form" modelAttribute="customer">
    First name: <form:input path="firstName"/>
    <br>
    Last name (*): <form:input path="lastName"/>
    <form:errors path="lastName" cssClass="error"/>
    <input type="submit" value="Submit"/>
</form:form>

因此,当我的 lastName 字段为空时,BindingResult 中没有错误。我做错了什么?

将 setter 添加到您的 Customer class。
没有 setter 你的 class 不会被填充。

如果类路径中不存在,请添加 hibernate-validator。如果您正在使用 gradlemaven 之类的任何构建工具,只需将 hibernate-validator 添加到依赖项即可。

例如:

Gradle:

compile group: 'org.hibernate.validator', name: 'hibernate-validator', version: '6.0.13.Final'

Maven:

<dependency>
    <groupId>org.hibernate.validator</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>6.0.13.Final</version>
</dependency>

注:解决方案基于IntelliJ IDEA IDE

如果不使用 Gradle 或 Maven 等构建工具,这可能与 IDE 在编译和构建解决方案期间手动添加库(项目依赖项)时的行为有关.

无论手动将库文件包含在项目中并由 IDE 通过项目结构 > 库手动添加那些 进行索引,那些 不会自动包含在构建过​​程的编译输出中

为了确保您包含的库 assembled 与 Spring MVC 解决方案一起执行以下操作:

  • 转到文件 > 项目结构 > 工件(从左侧窗格)

  • 展开“输出布局”选项卡下的 WEB-INF/lib 目录

  • 突出显示 lib 目录并通过单击 + 按钮和 selecting Library Files
  • 添加相应的 Hibernate 构件

  • 在 select 从项目库中获取库后,select 确定,申请,您就可以开始了

现在,当您重建解决方案和 运行 服务器时,您的 assembled 输出(构建)将包含所有额外添加的工件(库),例如 Hibernate 验证。

当使用 IntelliJ IDEA 的构建器编译基于 Java 的项目时,它使用自己的项目模型、配置和内置机制来 assemble输出应用程序,所以需要像我提到的这样的步骤。

这在此处是强制性的与使用 Gradle 或 Maven 编译和构建此类 Java 项目相比,后者使用自己的底层构建过程和 运行 特定任务来生成输出基于包含所有配置值和依赖项的 build.gradle 或 pom.xml 配置。