使用hibernate验证的Spring MVC不起作用

时间:2018-03-26 18:01:44

标签: spring validation spring-mvc hibernate-validator

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

header('Location: /logout');

控制器:

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;

客户form.jsp

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

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

3 个答案:

答案 0 :(得分:2)

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

例如:

成绩:

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>

答案 1 :(得分:1)

注意:基于IntelliJ IDEA IDE的解决方案

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

无论库文件是手动包含在项目中,还是由IDE通过通过“项目结构”>“库” 手动添加来对其进行索引,这些都不会被自动包含在构建过程的编译输出中。

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

  • 转到“文件”>“项目结构”>“工件”(在左窗格中)

enter image description here

  • 展开“输出布局”标签下的WEB-INF / lib目录

enter image description here

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

enter image description here

  • 从项目库中选择库后,依次选择“确定”,“应用”,您就可以开始使用

enter image description here

现在,当您重建解决方案并运行服务器时,组装的输出(内部版本)将包含所有其他添加的工件(库),例如Hibernate验证。

在使用IntelliJ IDEA的生成器编译基于Java的项目时,它使用其自己的项目模型,配置和内置机制来组装输出应用程序,因此需要执行上述步骤。

在这里这是强制性的,与使用Gradle或Maven编译和构建这样的Java项目相反,在Java项目中,它们使用自己的基础构建过程并运行特定任务以基于build.gradle或pom.xml配置保存所有内容。配置值和依赖项。

答案 2 :(得分:-1)

将setter添加到Customer课程。
没有setter,你的班级就不会被填充。