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

Spring Boot中@Valid注解突然失效的排查求助

Spring Boot 2.7.9中@Valid注解失效问题求助

我基于Spring Boot 2.7.9搭建个人项目,原本想通过@NotNull、@NotBlank等注解实现字段级校验,一开始发现代码无法检测错误,查资料后添加spring-boot-starter-validation依赖并重启IDE后恢复正常。但几天后添加业务逻辑和请求日志配置后,@Valid注解再次失效。

我已经尝试了以下操作,但均未解决问题:

  • 移除并重新添加spring-boot-starter-validation依赖,重启IDE
  • 移除基于OncePerRequestFilter的请求日志组件
  • 添加相关配置属性

另外发现一个现象:接口请求时不会触发校验,但持久化实体时会抛出ConstraintViolationException。

项目依赖(Pom.xml部分)

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <scope>runtime</scope>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.postgresql</groupId>
        <artifactId>postgresql</artifactId>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-envers</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>io.jsonwebtoken</groupId>
        <artifactId>jjwt</artifactId>
        <version>0.9.1</version>
    </dependency>
    <dependency>
        <groupId>org.springdoc</groupId>
        <artifactId>springdoc-openapi-ui</artifactId>
        <version>1.6.15</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-validation</artifactId>
    </dependency>
</dependencies>

控制器代码

@PostMapping(value = "/create")
public ResponseEntity<MyDetailedResponse> createClient(
        @Valid @RequestBody MyRequest request) {
    //business logic
}

实体类代码

@Entity
@Audited
@Table(name = "client_details")
@JsonIgnoreProperties(value = { "optlock", "createdDate", "createdBy", "lastModifiedDate",
        "lastModifiedBy" }, ignoreUnknown = true)
public class AppClientDetails extends EntityVersionedMetaData {

    private static final long serialVersionUID = 756964595629774899L;

    @NotBlank(message = "Name can not be blank")
    private String fullName;

    @NotBlank(message = "Please choose a short code for the client")
    private String shortCode;

    @NotBlank(message = "Address is mandatory.")
    @Size(min = 1, max = 255)
 // @Pattern(regexp = "^([a-zA-Z0-9.&:-\S+]{1,255})$", message = "Invalid address. Only alphabets, number and . & : - are allowed")
    private String address;

    @NotBlank(message = "Contact person name is mandatory")
    private String contactPerson;

    private long phoneNumber;

    private String emailId;

    private String logoUrl;

    @NotNull(message = "Strength is required")
    private Short strength;

    @Temporal(TemporalType.DATE)
    private Date establishedDate;

    @Temporal(TemporalType.DATE)
    private Date onboardingDate;

    @NotBlank(message = "Plan must be selected")
    private String currentPlan;

    @Enumerated(EnumType.ORDINAL)
    private AppUserStatus clientStatus = AppUserStatus.ACTIVE;

   //getters setters
}

另外还有一个问题:我注释了@Pattern注解,因为其正则中的\S会抛出非法字符异常。最后我删除了.m2目录和工作区,重新创建项目,问题仍未解决。有人遇到过类似问题吗?


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 15:33:16