Java 带hibernate验证的Spring MVC不起作用
我对Spring的hibernate验证有一些问题。我做了在线教程中解释的一切,但它不起作用,我只是进入下一页,没有验证错误Java 带hibernate验证的Spring MVC不起作用,java,spring,validation,spring-mvc,hibernate-validator,Java,Spring,Validation,Spring Mvc,Hibernate Validator,我对Spring的hibernate验证有一些问题。我做了在线教程中解释的一切,但它不起作用,我只是进入下一页,没有验证错误 import javax.validation.constraints.NotNull; import javax.validation.constraints.Size; public class Customer { private String firstName; @NotNull() @Size(min=1, message = "this field m
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";
}
customer-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添加到客户类中。
如果没有setter,则不会填充类。如果类路径中不存在hibernate验证程序,则在类路径中添加它。如果您正在使用任何构建工具,如gradle或maven,只需将hibernate验证器添加到依赖项中即可
例如:
格拉德尔:
马文:
注:基于IntelliJ IDEA的解决方案
如果不使用诸如Gradle或Maven之类的构建工具,这可能与在手动添加库项目依赖项时编译和构建解决方案期间IDE的行为有关
不管通过project Structure>Libraries手动将库文件包括在项目中并由IDE编制索引,这些库文件都不会自动包含在构建过程的编译输出中
为了确保所包含的库与Spring MVC解决方案组装在一起,请执行以下操作:
从左窗格转到文件>项目结构>工件
展开“输出布局”选项卡下的WEB-INF/lib目录
通过单击+按钮并选择库文件,高亮显示lib目录并添加相应的Hibernate工件
从项目库中选择库后,选择“确定”、“应用”,即可开始
现在,当您重建解决方案并运行服务器时,组装的输出构建将包含所有额外添加的构件库,如Hibernate验证
当使用IntelliJ IDEA的builder编译基于Java的项目时,它使用自己的项目模型、配置和内置机制来组装输出应用程序,因此需要像我提到的这样的步骤
与使用Gradle或Maven编译和构建此类Java项目相比,这是强制性的,在这些项目中,使用自己的底层构建过程并运行特定的任务来生成基于build.Gradle或pom.xml配置的输出,其中包含所有配置值和依赖项。您是在执行HTTP GET还是POST?这是一个简单的过程POST方法是否调用了控制器方法processForm?如果执行HTTP post,则应使用@RequestMappingvalue=/processForm,method=RequestMethod.POSTbtw:@NotNull@Sizemin=1,message=此字段不能为空,可以替换为@NotEmptyyes,我正在使用intellij,在调试模式下可以检查它。我已经添加了method=RequestMethod.POST,但我认为如果没有指定,该方法将适用于所有类型的消息?
compile group: 'org.hibernate.validator', name: 'hibernate-validator', version: '6.0.13.Final'
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.0.13.Final</version>
</dependency>