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
相关产品推荐
相关产品推荐

