Spring未触发JSR-303 Bean验证:已满足配置条件仍无效
Spring Bean Validation未生效问题
我已按要求配置了MethodValidationPostProcessor,并给目标Spring Bean添加了@Validated注解,但Hibernate Bean Validation仍未启用。调用backgroundCheck方法时,传入的Person对象name为null、age小于18,预期会抛出验证异常,但实际方法无异常执行完毕。
代码配置如下:
Application类
import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.Bean; import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean; import org.springframework.validation.beanvalidation.MethodValidationPostProcessor; @SpringBootApplication public class Application implements CommandLineRunner { public static void main(String[] args) { SpringApplication.run(Application.class, args); } @Bean public LocalValidatorFactoryBean validator() { return new LocalValidatorFactoryBean(); } @Bean public MethodValidationPostProcessor methodValidationPostProcessor() { MethodValidationPostProcessor methodValidationPostProcessor = new MethodValidationPostProcessor(); methodValidationPostProcessor.setValidator(validator()); return methodValidationPostProcessor; } @Override public void run(String... args) { PersonService personService = new PersonService(); try { personService.backgroundCheck(new Person(null, 4)); } catch (Exception e) { System.out.println("<<< EXCEPTION >>>"); return; } System.out.println("<<< NO VALIDATIONS THROWN >>>"); } }
PersonService类
import jakarta.validation.Valid; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; @Validated @Service public class PersonService { public void backgroundCheck(@Valid Person person) { System.out.printf("Running background check for %s%n", person.name()); } }
Person记录类
import jakarta.validation.constraints.Min; import jakarta.validation.constraints.NotBlank; public record Person( @NotBlank(message = "Name must not be blank") String name, @Min(value = 18, message = "Age should not be less than 18") int age) { }
pom.xml依赖
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.2.3</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <java.version>21</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>
请问我遗漏了什么配置?
内容的提问来源于stack exchange,提问作者Commander
相关产品推荐
相关产品推荐

