끄적끄적
[spring] @Valid와 MessageSource 사용하기 본문
- MessageConfig 작성
@Configuration
public class MessageConfig implements WebMvcConfigurer {
@Bean
public LocaleResolver localeResolver() {
SessionLocaleResolver localeResolver = new SessionLocaleResolver();
localeResolver.setDefaultLocale(Locale.KOREA);
return localeResolver;
}
@Bean
public LocaleChangeInterceptor localeChangeInterceptor() {
LocaleChangeInterceptor localeChangeInterceptor = new LocaleChangeInterceptor();
localeChangeInterceptor.setParamName("lang");
return localeChangeInterceptor;
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(localeChangeInterceptor());
}
@Bean
public MessageSource messageSource(){
ReloadableResourceBundleMessageSource messageSource
= new ReloadableResourceBundleMessageSource();
messageSource.setBasenames("classpath:/properties/messages/messages",
"classpath:/properties/messages/messages_en");
messageSource.setDefaultEncoding("UTF-8");
return messageSource;
}
@Bean
public LocalValidatorFactoryBean validator() {
LocalValidatorFactoryBean bean = new LocalValidatorFactoryBean();
bean.setValidationMessageSource(messageSource());
return bean;
}
}
주의사항
- 위 코드에서 @Bean validator()가 핵심적인 역할을 수행
- messages.properties 파일들은 messages_xxx.properties 양식을 반드시 따라야한다.
- setBasenames에서 경로에 /messages가 반드시 포함되어야함
아래와 같이 message에 message.properties의 내용을 입력
@Data
public static class Write{
@NotBlank(message = "{board.title.not.blank}")
@Size(min=1,max=50,message = "{board.title.size}")
private String title;
@NotBlank(message = "{board.content.not.blank}")
private String content;
@FileSize(fileSize = 1024*1024, nullable = true, message = "{board.filesize}")
@FileExtension(fileExtension = {"txt","hwp","png","jpg"}, nullable = true, message = "{board.fileextension}")
private List<MultipartFile> fileList;
public boolean isNullFileList(){
return fileList==null;
}
}
참고 :
https://www.javadevjournal.com/spring-boot/spring-custom-validation-message-source/
https://www.baeldung.com/spring-custom-validation-message-source
https://www.baeldung.com/spring-boot-internationalization
'개발' 카테고리의 다른 글
[vue] summernote 컴포넌트로 사용하기 (0) | 2020.02.19 |
---|---|
[spring] request, response 객체 얻기 (0) | 2020.02.19 |
[javascript] 브라우저가 크롬인지 확인하는 법 (0) | 2020.02.19 |
[spring] @Cacheable 사용하기(+ ehcache 설정) (0) | 2020.02.19 |
[spring] @Async 사용하기 (0) | 2020.02.19 |
Comments