// 밑의 어노테이션 정의는 상황마다 다름
@Target( {FIELD})
@Retention(RUNTIME)
@Constraint(validatedBy = 조건밸리데이터.class)
@Documented
@NotNull
public @interface 조건 {
String message() default "{메시지 키}";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 코드스피츠
- jsr380
- cache-control
- i18n
- LastModified
- kotliln
- 브로틀리
- jsr303
- HTTP
- 지뢰찾기
- cross parameter
- 리얼월드HTTP
- Kotlin
- brotli
- 클래스레벨밸리데이션
- 워드프레스
- 개미수열
- 랜선아미안해
- 지수반등
- etag
- 알게뭐냐
- Spring
- 알고리즘
- 스프링
- 이렇게살아야되나자괴감이
Archives
- Today
- Total
취미개발 블로그와 마음수양
스프링 부트 custom validaiton 과 i18n 메시지의 처리 본문
스프링 부트 custom validaiton 과 i18n 메시지의 처리
내용
개발하다보면 공통적으로 발생하는 커스텀 밸리데이션 어노테이션을 만들 때가 있다. 뭐.. 만드는 법은 넘 간단해부려서..
조건인터페이스.java
이렇게 만들면 되고 여기서 사용할 밸리데이터는
조건밸리데이터.java
public class 조건밸리데이터 implements ConstraintValidator<조건, 필드타입이 될 수 있는> {
@Override
public void initialize(조건 annotation) {
}
@Override
public boolean isValid(필드타입이 될 수 있는 value, ConstraintValidatorContext context) {
//조건 맞는지 참 거짓 리턴
}
}
이렇게 만들면 되고
테스트는 뭐 이런식으로 테스트를 해볼 수가 있을 것이다. 참조 ( 조원태님 슬라이드 ) 하단 링크 참조
CustomValidateTest.java
ValidatorFactory validatorFactory = Validation.buildDefaultValidatorFactory();
Validator validator = validatorFactory.getValidator();
@Test
public void test() throws Exception{
테스트클래스 객체 = new 테스트클래스("조건");
Set<ConstraintViolation<TestOnlyLetter>> constraintViolations = validator.validate(testClass);
assertThat(constraintViolations.size()).isEqualTo(1);
constraintViolations.forEach(n-> assertThat(n.getMessage()).isEqualTo("{메시지 키}"));
}
@Data @NoArgsConstructor @AllArgsConstructor
static class 테스트클래스 {
@조건
String testMsg;
}
하지만 이것을 스프링 부트에서 연동하는 순간 어노테이션에 정의한 메시지키를 그대로 사용할 수가 없는데.. 이럴 때는 이렇게 해주면 된다
public class WebConfig extends WebMvcConfigurerAdapter {
@Autowired
private MessageSource messageSource;
@Override
public Validator getValidator() {
LocalValidatorFactoryBean factory = new LocalValidatorFactoryBean();
factory.setValidationMessageSource(messageSource);
return factory;
}
}
아흙.. 너무 간단ㅠㅜ 하지만 과정이 넘 힘들었어..ㅠ
참고 링크
http://www.slideshare.net/wontaejo/bean-validation-11
http://blog.trifork.com/2009/08/04/bean-validation-integrating-jsr-303-with-spring/
추가적으로 나중에 고민 해볼 수 있는 문제들과 좀 더 배운 점
interpolate 라는 것을 나중에라도 한 번 좀 봐야겠는데..?
JSR 349 에서인가 추가되어있는 ${validatedValue} 로 밸리데이션 메시지를 좀 더 풍부하게 할 수 있다 ?
개발하다보면 ajax 같은 것들은 또 백엔드와 비슷하게 밸리데이션 조건을 들어가야할 수도 있는데.. (스프링 폼태그를 못 타기 때문), 밸리데이션을 XML로 만들고 한군데서 밸리데이션 조건을 관리하면 더 편하지 않을까..? 자바스크립트로 해당 XML을 조건으로 변환해주는 라이브러리가 필요할지도..
스프링 MVC 컨트롤러에서 값이 어떻게 들어가서 어떻게 조건을 통과하는지 좀 자세히.. 알고 싶다.
'FrameWork_ETC > Spring' 카테고리의 다른 글
스프링 부트 파일 업로드 에러 The temporary upload location [] is not valid (1) | 2018.01.22 |
---|---|
스프링 시큐리티 @CreatedBy 테스트 (0) | 2017.06.09 |
BeanFactory 와 ApplicationContext (0) | 2015.11.15 |
Google App engine 스프링 + JPA 연동 (앱엔진 스프링 JPA) (2) | 2014.12.15 |
Spring의 Encryptors 문서 둘러보기. (0) | 2014.12.03 |