You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring MVC中@Size与@NotEmpty验证注解失效问题求助

Spring MVC验证功能不生效问题排查与解决

我创建了一个简单的Spring MVC程序,想要为User类的firstName和secondName字段添加验证,使用了@Size和@NotEmpty注解。程序其他功能正常,但验证功能不生效:点击提交按钮时,预期会显示错误提示,实际却没有出现。


主要问题:依赖版本不兼容

Spring 5.3.x 基于javax.validation(JSR-380)规范,而引入的hibernate-validator:8.0.0.Final是基于jakarta.validation(Jakarta Validation 3.0)的版本,两者API包路径不同(javax vs jakarta),导致Spring无法识别验证注解,从而不执行验证逻辑。

解决步骤:

将Hibernate Validator替换为兼容Spring 5的版本(6.x系列,基于javax.validation),同时添加javax.validation的API依赖。修改后的POM依赖部分如下:

<!-- 验证API依赖 -->
<dependency>
    <groupId>javax.validation</groupId>
    <artifactId>validation-api</artifactId>
    <version>2.0.1.Final</version>
</dependency>
<!-- 兼容Spring 5的Hibernate Validator版本 -->
<dependency>
    <groupId>org.hibernate.validator</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>6.2.5.Final</version>
</dependency>

次要问题:JSP页面结构错误

authorization.jsp末尾存在多余的</form>标签,会导致HTML结构异常,可能影响表单提交和错误信息渲染。修正后的JSP代码:

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

<html>
<head>
    <meta charset="UTF-8">
</head>
<body>
<div>
    <div>
        <p>Authorization</p>
        <form:form action="welcome" modelAttribute="user">
            <div>
                <label>Please enter your First name</label>
                <form:input path="firstName"/>
                <form:errors path="firstName"/>
            </div>
            <div>
                <label>Please enter your Second name</label>
                <form:input path="secondName"/>
                <form:errors path="secondName"/>
            </div>
            <div>
                <label>Please choose your department</label>
                <form:select path="department">
                    <form:options items="${user.departments}"/>
                </form:select>
            </div>
            <div>
                <input type="submit" value="Send">
            </div>
        </form:form>
    </div>
</div>
</body>

</html>

确认Controller参数顺序(你的代码已正确)

必须保证@Valid注解修饰的对象紧跟在BindingResult参数之前,这样Spring才能将验证结果绑定到BindingResult中。你的Controller代码中该顺序符合要求,无需修改:

public String showDetails(@Valid @ModelAttribute("user") User user, BindingResult bindingResult) {
    if (bindingResult.hasErrors()) {
        return "authorization";
    } else {
        return "welcome";
    }
}

内容的提问来源于stack exchange,提问作者Vlad Zherikhov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 19:29:52