context-bean.xml
<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/>
<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="defaultEncoding" value="UTF-8" />
<property name="basename" value="classpath:errors" />
</bean>
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver">
<property name="defaultLocale" value="ko" />
</bean>
bean id="validator"
LocalValidatorFactoryBean
을 글로벌 Validator로 등록한다. 이 Validator는 @NotNull
같은 애노테이션을 보고 검증을 수행한다. 이렇게 글로벌 Validator가 적용되어 있기 때문에, @Valid
, @Validated
만 적용하면 된다. 검증 오류가 발생하면 FieldError
, ObjectError
를 생성해서 BindingResult
에 담아준다.
bean id="messageSource"
오류 메시지 파일의 위치를 인식할 수 있게 이 설정을 추가한다. classpath로 지정된 곳에 errors_ko.properties
파일이 존재해야 한다.
bean id="localeResolver"
세션을 통해 사용자의 로케일 정보를 관리합니다.
pom.xml
<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>
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>jakarta.el</artifactId>
<version>3.0.3</version>
</dependency>
jakarta.validation-api
: Bean Validation 인터페이스hibernate-validator
: 구현체jakarta-el
: EL 기능을 제공하는 라이브러리. Hibernate Validator가 EL을 통해 동적인 유효성 검사를 수행할 수 있게 됩니다.errors.properties
NotBlank
라는 오류 코드를 통해 MessageCodesResolver
가 어떤 메시지 코드를 순서대로 만드는지 알아보자. 처음이 구체적이고 마지막이 덜 구체적이다.
1. NotBlank.item.itemName
2. NotBlank.itemName
3. NotBlank.java.lang.String
4. NotBlank
오류 코드는 구체적 ⭢ 덜 구체적인 것을 우선으로 만들어준다. 이때 크게 중요하지 않은 메시지 같은 경우에는 기본 메시지를 사용하도록 한다. 설정된 메시지 파일에서 첫번재로 찾은 오류 코드에 맵핑된 오류 메시지 아이디는 공백일 수 없습니다
를 출력한다.