当前位置: 首页 > 知识库问答 >
问题:

Hibernate Validator@NotNull不能正常工作

桂嘉年
2023-03-14

我正在尝试使用Hibernate验证器制作简单的验证表单。我的Customer类中有两个字段,我希望其中一个字段是必需的(lastName)。关键是,即使im没有填充这个字段,我也不会得到错误消息,BindingResult也不包含任何错误。我的代码中缺少什么吗?

public class Customer {

    private String firstName;

    @NotNull(message = "is required")
    @Size(min = 1, message = "is required")
    private String lastName;

    public String getFirstName() {
        return firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
}
@Controller
@RequestMapping("/customer")
public class CustomerController {

    //adding new customer to model
    @RequestMapping("/showForm")
    public String showForm(Model theModel){

        theModel.addAttribute("customer", new Customer());

        return "customer-form";
    }

    //Validating passed customer attribute/object
    //Biding result object holds validation results
    @RequestMapping("/processForm")
    public String processForm(
            @Valid @ModelAttribute("customer") Customer theCustomer, BindingResult theBindingResult) {

        if (theBindingResult.hasErrors()){
            return "customer-form";
        }

        return "customer-confirmation";
    }
}

编辑:表单代码:

<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Customer Registration Form</title>
</head>
<body>

<style>
    .error{color: red}
</style>


<i> Fill out the form. Asteriks (*) means required. </i>
<br><br>
<form:form action="processForm" modelAttribute="customer">

    First name: <form:input path="firstName" />

    <br><br>

    Last name (*): <form:input path="lastName"/>
    <form:errors path="lastName" cssClass="error" />
    <input type="submit" value="Submit"/>

</form:form>

</body>
</html>

编辑2:我添加到类路径validation-api.jar(包含抽象API和注释扫描程序)。

还插入了@initbinnder,以确保空表单字段始终为null,而不是空字符串。

@InitBinder
public void initBinder(WebDataBinder dataBinder) {

    StringTrimmerEditor stringTrimmerEditor = new StringTrimmerEditor(true);

    dataBinder.registerCustomEditor(String.class, stringTrimmerEditor);
}

虽然我已将其添加到类路径中

ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
validator.validate(theCustomer);

编辑4:添加Spring配置文件:

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
    id="WebApp_ID" version="3.1">

    <display-name>mvc-validation-demo</display-name>

    <!-- Spring MVC Configs -->

    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/mvc-validation-demo.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

</web-app>
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="
            http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context.xsd
            http://www.springframework.org/schema/mvc
            http://www.springframework.org/schema/mvc/spring-mvc.xsd
            http://www.springframework.org/">

    <context:component-scan base-package="com.lobo.mvc" />

    <mvc:annotation-driven/>

    <bean
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/view/" />
        <property name="suffix" value=".jsp" />
    </bean>

</beans>
<bean id="validator" class="org.springframework.validation.beanvalidation.LocalVa‌​lidatorFactoryBean"/‌​>

类路径

但错误仍然存在

共有1个答案

娄学文
2023-03-14

删除.idea、清除缓存和新配置为我完成了这项工作。似乎不知何故它没有看到hibernate-validator.jar。

感谢每一位做出贡献的人。

 类似资料:
  • 我正试图在按下某个按钮时弹出一个警报对话框。我首先使用了Android Developer的示例代码而不是'这不起作用,所以我根据在这个站点上发现的情况进行了更改,但是现在我的程序在按下按钮后被迫停止。 就你的知识而言,这是在第二个不同于主要的活动中完成的。不确定这是否重要.... ‘ 碰撞日志:“03-25 19:34:24.373:E/AndroidRuntime(18828):致命异常:ma

  • 2,错误{org.apache.directory.server.LDAP.ldapserver}-ERR_171无法将LDAP服务(10,389)绑定到服务注册表。java.net.BindException:已在使用的地址 请帮忙谢谢 --------提示------------------- JAVA_HOME环境变量设置为/opt/java CARBON_HOME环境变量设置为/mnt/1

  • 我正在做一个类似生存的游戏,我有两种类型的碰撞,一种是玩家的敌人,另一种是敌人身上的子弹。我也有一个健康栏,由于某些原因,在picbox被移除后,健康仍然下降,就像敌人与玩家互动一样。 这是子弹碰撞代码的一个块(所有8个方向的所有代码都是相同的) 这是敌方与玩家碰撞的暗号

  • null 获取http://localhost:8888/image-service/default: 获取http://localhost:8888/image-service/prod 我在REST应用程序中激活了配置文件,但始终显示默认配置文件中的值。

  • 一般:我是一个想在Storm/Kafka/Flink/MS Azure SA/Spark上运行一些性能测试(WordCount)的学生。我想使用Kafka经纪人作为输入源。 我使用了Storm-Starter项目中的WordCount示例,并添加了Kafka作为喷口: 我使用kafka-console-producer生成一些消息。我希望有人能帮助我。我是编程Storm的新手...

  • 嗨,我想在日志模式中显示登录的用户ID、主机名、ip地址等。我也在使用log4j。我正在使用MDC。在我的主控制器中,我可以看到带有指定模式的日志,但在其他文件日志中,我无法看到模式,这是不是好像我在某个会话中设置了MDC,并在其他控制器中再次放置了上下文值?请建议。 log4j.properties 我还有其他不同的控制器。现在,主控制器中的logger语句在日志模式中显示上下文信息,但在其他控