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
。如果您正在使用 gradle
或 maven
之类的任何构建工具,只需将 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 配置。
我在使用 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
。如果您正在使用 gradle
或 maven
之类的任何构建工具,只需将 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 配置。