[SPRING] Hibernate Validator, 사용자 정의 ResourceBundleLocator 및 Spring
SPRINGHibernate Validator, 사용자 정의 ResourceBundleLocator 및 Spring
최대 절전 모드 유효성 검사 4.1에서 기본 ResourceBundleLocator를 재정의하려고합니다. 지금까지는 완벽하게 작동하지만 사용법의 유일한 예는 ValidationFactory를 인스턴스화하는 Java 코드를 포함합니다.
봄철 웹 응용 프로그램을 사용할 때 최대 절전 모드 유효성 검사가 자동으로 구성됩니다 (적절한 최대 절전 모드 유효성 검사 * .jar 파일 만 있어야하며 자동으로 사용됩니다). 어떻게 그 시나리오에서 ResourceBundleLocator를 대체 할 수 있습니까? 모든 사용자 정의 ResourceBundleLocator를 모든 특성 또는 applicationContext.xml 파일에서 지정하는 방법이 없습니다.
해결법
-
==============================
1.필요한 작업을 수행하는 매직 메소드는 LocalValidatorFactoryBean # setValidationMessageSource (MessageSource messageSource)입니다.
필요한 작업을 수행하는 매직 메소드는 LocalValidatorFactoryBean # setValidationMessageSource (MessageSource messageSource)입니다.
우선, 방법의 계약 : -
이 메소드를 호출하여 사용자 정의 message.properties (또는 .xml)를 지정할 수 있습니다.
my-beans.xml
<bean name="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"> <property name="validationMessageSource"> <ref bean="resourceBundleLocator"/> </property> </bean> <bean name="resourceBundleLocator" class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> <property name="basenames"> <list> <value>META-INF/validation_errors</value> </list> </property> </bean>
validation_errors.properties
javax.validation.constraints.NotNull.message=MyNotNullMessage
Person.java
class Person { private String firstName; private String lastName; @NotNull public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } }
BeanValidationTest.java
public class BeanValidationTest { private static ApplicationContext applicationContext; @BeforeClass public static void initialize() { applicationContext = new ClassPathXmlApplicationContext("classpath:META-INF/spring/webmvc-beans.xml"); Assert.assertNotNull(applicationContext); } @Test public void test() { LocalValidatorFactoryBean factory = applicationContext.getBean("validator", LocalValidatorFactoryBean.class); Validator validator = factory.getValidator(); Person person = new Person(); person.setLastName("dude"); Set<ConstraintViolation<Person>> violations = validator.validate(person); for(ConstraintViolation<Person> violation : violations) { System.out.println("Custom Message:- " + violation.getMessage()); } } }
출력 : 사용자 지정 메시지 : - NotNull 메시지
-
==============================
2.기존의 최대 절전 모드 유효성 검증 메시지와 사용자 정의 유효성 검증 메시지를 혼합하려는 경우 다음과 같은 솔루션이 있습니다.
기존의 최대 절전 모드 유효성 검증 메시지와 사용자 정의 유효성 검증 메시지를 혼합하려는 경우 다음과 같은 솔루션이 있습니다.
<mvc:annotation-driven validator="validator" /> <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"> <property name="validationMessageSource" ref="messageSource"/> </bean> <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"> <property name="basenames" value="i18n,iso-i18n,org.hibernate.validator.ValidationMessages" /> <property name="useCodeAsDefaultMessage" value="true" /> </bean>
(Web MVC 프레임 워크 유효성 검사 섹션과 Spring 문서에서 Bean 유효성 검사 공급자 구성하기 참조)
-
==============================
3.귀하의 답변에 따라 @ Lu55, 고마워, 내 문제를 해결 !!
귀하의 답변에 따라 @ Lu55, 고마워, 내 문제를 해결 !!
방금 Configuration 클래스로 변환했는데 다른 사람이 필요로 할 때를 대비하여 여기에 게시하고 있습니다.
가져 오기 세부 사항 : ReloadableResourceBundleMessageSource를 사용하여 저에게 효과적 이었지만 ResourceBundleMessageSource를 사용하여 작동하지 않았습니다. 왜 그런지 모르겠습니다.
@Configuration public class ErrorConfig { @Bean public Validator validatorFactory (MessageSource messageSource) { LocalValidatorFactoryBean validator = new LocalValidatorFactoryBean(); validator.setValidationMessageSource(messageSource); return validator; } @Bean public MessageSource messageSource() { ReloadableResourceBundleMessageSource bean = new ReloadableResourceBundleMessageSource(); bean.addBasenames("classpath:org.hibernate.validator.ValidationMessages","classpath:message"); bean.setDefaultEncoding("UTF-8"); return bean; } }
내 리소스 폴더 안에 message.properties 파일이 있습니다.
from https://stackoverflow.com/questions/4186556/hibernate-validator-custom-resourcebundlelocator-and-spring by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 어떻게 봄을 사용하여 다시 브라우저 버튼 문제를 처리 할 수 있습니까? (0) | 2019.02.01 |
---|---|
[SPRING] Spring DI applicationContext.xml xsi : schemaLocation은 정확히 어떻게 사용됩니까? (0) | 2019.01.31 |
[SPRING] 하나의 DataSource로 Spring의 프로그래밍 방식으로 데이터베이스를 변경하는 방법 (0) | 2019.01.31 |
[SPRING] JPA의 기준 빌더에서 ignorecase (0) | 2019.01.31 |
[SPRING] jquery를 사용하여 select의 모든 옵션을 어떻게 업데이트합니까? (0) | 2019.01.31 |