CannotLoadBeanClassException: Error loading class [org.springframework.validation.beanvalidation.LocalValidatorFactoryBean]
nested exception is java.lang.NoClassDefFoundError: javax/validation/ValidatorFactory
專案缺少 Bean Validation API (JSR-303/349/380) 實作相依套件。Spring 嘗試實例化 LocalValidatorFactoryBean 時,類別路徑找不到 javax.validation.ValidatorFactory 介面。
<dependency>
<groupId>jakarta.validation</groupId>
<artifactId>jakarta.validation-api</artifactId>
<version>3.0.2</version>
</dependency>
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>8.0.1.Final</version>
</dependency>
<!-- 若使用舊版 Spring (javax 命名空間) -->
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.1.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.2.5.Final</version>
</dependency>
若專案已引入 spring-boot-starter-validation,請檢查是否有其他套件排除或覆蓋了 validation-api,使用 mvn dependency:tree | grep validation 確認。
<mvc:annotation-driven validator="validator"/>
<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/>
確保上述配置存在且 validator bean 名稱一致。
| Spring 版本 | Validation API | Hibernate Validator |
|---|---|---|
| Spring 5.3.x / Boot 2.5+ | jakarta.validation-api 2.0+/3.0+ | 6.2.x / 8.0.x |
| Spring 4.x / Boot 1.5 | javax.validation:validation-api 1.1/2.0 | 5.4.x / 6.0.x |