(ing) @Valid, @Validated 작동하지 않는 현상

pickylemon·2024년 5월 24일

Exception 모음

목록 보기
21/31

상황 및 환경

  • spring 5.3.3과 java 11 사용 중
  • Bean Validation 사용하기 위해 pom.xml에 jakarta validation과 그 구현체인 hibernate validator 추가
<!-- pom.xml -->

		<!-- Validation 관련 -->
		<!-- https://mvnrepository.com/artifact/jakarta.validation/jakarta.validation-api -->
		<dependency>
		    <groupId>jakarta.validation</groupId>
		    <artifactId>jakarta.validation-api</artifactId>
		    <version>3.0.2</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.hibernate.validator/hibernate-validator -->
		<dependency>
		    <groupId>org.hibernate.validator</groupId>
		    <artifactId>hibernate-validator</artifactId>
		    <version>8.0.1.Final</version>
		</dependency>
  • 컴파일 오류는 전혀 발생하지 않고, 어노테이션도 잘 적용되지만 실제 실행해보면 아무런 검증도 되지 않음. 즉, 잘못된 입력값에 대한 검증이 이루어지지 않는다는 뜻.

원인 및 해결

  • OptionalValidatorFactoryBean를 bean으로 등록해주기

  • dependency 버전 맞춰주기

  • ValidatorFactoryBean을 servlet 설정파일에 bean으로 등록해주면 예외가 발생하게 된다.

    nested exception is org.springframework.beans.factory.CannotLoadBeanClassException: Error loading class [org.springframework.validation.beanvalidation.OptionalValidatorFactoryBean] for bean with name 'beanValidator' defined in ServletContext resource [/WEB-INF/pf-servlet.xml]: problem with class file or dependent class; nested exception is java.lang.NoClassDefFoundError: javax/validation/ValidatorFactory

  • 해당 dependency는 Jakarta EE9에서 유효한데, 나의 Spring 버전은 5.3대 (즉, Jakarta EE 8 level)

  • 스프링과 Jakarta 버전에 맞는 버전으로 다시 의존성을 추가해주었다.

<!-- pom.xml -->


		<!-- https://mvnrepository.com/artifact/jakarta.validation/jakarta.validation-api -->
		<dependency>
		    <groupId>jakarta.validation</groupId>
		    <artifactId>jakarta.validation-api</artifactId>
		    <version>2.0.2</version>
		</dependency>
<!--		 https://mvnrepository.com/artifact/org.hibernate.validator/hibernate-validator -->
		<dependency>
		    <groupId>org.hibernate.validator</groupId>
		    <artifactId>hibernate-validator</artifactId>
		    <version>6.2.0.Final</version>
		</dependency>

profile
안녕하세요

0개의 댓글