【问题标题】:Spring MVC with hibernate validation doesn't work具有休眠验证的 Spring MVC 不起作用
【发布时间】:2018-03-26 18:01:44
【问题描述】:

我在使用 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";
}

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 中没有错误。我做错了什么?

【问题讨论】:

  • 您是在执行 HTTP GET 还是 POST?
  • 这是POST方法
  • 你的控制器方法 processForm() 被调用了吗?如果您执行 HTTP 发布,则应使用 @RequestMapping(value = "/processForm", method = RequestMethod.POST) 进行注释
  • 顺便说一句:@NotNull() @Size(min=1, message = "this field must not to be empty") 可以替换为@NotEmpty
  • 这里有点晚了。你解决了吗?如果没有,你确定你的类路径中有hibernate-validator 吗?

标签: java spring validation spring-mvc hibernate-validator


【解决方案1】:

如果您的类路径中不存在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>

【讨论】:

  • 只是一个提示,您可以通过在应用程序启动时检查以下日志行来检查 HV 是否首先正确初始化(这是来自 Spring Boot 应用程序,但其他平台也可能会显示它):[background-preinit] INFO Version HV000001: Hibernate Validator 5.3.5.Final
【解决方案2】:

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

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

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

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

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

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

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

  • 从项目库中选择库后,选择 OK,Apply 即可开始使用

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

使用 IntelliJ IDEA 的 builder 编译基于 Java 的项目时,它使用自己的项目模型、配置和内置机制来组装输出应用程序,所以需要我提到的这些步骤。

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

【讨论】:

    【解决方案3】:

    将 setter 添加到您的 Customer 类。
    如果没有 setter,您的类不会被填充。

    【讨论】:

      猜你喜欢
      • 2023-03-16
      • 2022-01-20
      • 2019-03-20
      • 1970-01-01
      • 2017-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      相关资源
      最近更新 更多