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

Spring Boot中使用Thymeleaf展示表单校验错误信息失效问题求助

问题根因

你当前的校验注解加在了JPA实体类BitUser上,但Controller层接收表单参数的是BitUserRegistrationDto对象,DTO上没有配置任何校验规则,所以Controller层的@Valid不会触发校验,请求会直接进入业务层,调用持久化逻辑时Hibernate会对BitUser实体做校验,此时抛出的异常没有被捕获,直接返回500错误。


修改步骤

1. 给BitUserRegistrationDto添加校验注解

把原来写在BitUser实体类上的校验规则移到DTO上,代码如下:

package bitsTracker.entity;

import lombok.Data;
import javax.validation.constraints.Email;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

@Data
public class BitUserRegistrationDto {
    
    @NotEmpty(message = "姓名不能为空")
    private String name;

    @NotEmpty
    @NotNull
    @Size(min=2, message ="用户名长度不能小于2位")
    private String userName;
    
    @Email(message = "请输入合法的邮箱地址")
    @NotNull
    @NotEmpty
    private String email;

    @NotEmpty
    @NotNull
    @Size(min = 8 , message ="密码最少8位,需包含至少1个数字和特殊字符")
    private String password;
}

2. 引入校验依赖(如果未引入)

Spring Boot 2.3及以上版本默认没有集成校验模块,需要手动引入依赖,Maven配置如下:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

3. 可选:关闭Hibernate自动校验

如果BitUser实体类上需要保留校验注解用于其他场景,可以在application.properties中关闭Hibernate持久化时的自动校验,避免重复校验抛出异常:

spring.jpa.properties.javax.persistence.validation.mode=none

修改完成后,Controller层接收表单参数时就会自动触发校验,错误信息会存入BindingResult对象,返回表单页后Thymeleaf就能正常渲染错误提示。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 22:18:03