Spring Boot 는 “src/main/resources/messages.properties” 를 찾았을 때 자동으로 MessageSource를 구성해준다.
프로퍼티를 찾아서 빈으로 등록해주지만, Validation메세지 설정은 해주지 않는다.
@Configuration 클래스에서 아래 설정으로 빈등록해줘야함
코틀린에서 생성자에 validation 어노테이션을 사용할 때, @field:~, @get:~ 로 접근해야 한다.
→ @field:~ 컴파일 후 어노테이션이 붙는 위치는 = 필드
→ @get:~ 컴파일 후 어노테이션이 붙는 위치는 = Getter
코틀린은 자동으로 생성해주는 코드들(field, getter/setter, ~Contructor)를 자동으로 만들어주는 동작을 하면서 어디에 어노테이션을 붙일지 지정(Annotation use-site target)하지 않으면, 특정 순서대로 @Annotation 의 @Target의 가능여부를 조사하여 가능한 첫번째의 @Target을 선택한다.
그 순서는
- param - (a contructor parameter)
- property = (자바는 접근할 수 없는 코틀린의 프로퍼티)
- field
Validation은 field의 속성을 검증하는 것이니~ @field:~, @get:~ 를 사용한다.
Spring에서 @Valid는 Field, Getter 둘다 검사하기 때문에 어디에 붙여도 원하는 대로 동작
→ 특정 validation에서 공통 에러 메세지를 세팅하고 싶을 때,
지정하고픈 validation 풀패키지 경로를 정의하고, 해당 validator의 message를 세팅할 수 있다.
→ 정규식에 자신이 있다면 Pattern(regexp = “정규깽이~“) 를 사용할 수 있다.
thymeleaf 에서 에러메세지를 받아서 처리하는 방법 : https://jojoldu.tistory.com/129 요 블로그를 읽어보자!
- 뀰팁
IntelliJ를 사용해 Java에서 Kotlin으로 자동 컨버팅할때, @Valid 어노테이션이 잘못된 위치에 붙어있을 수 있다.
@PostMapping public Id create(@RequestBody someInfo: @Valid SomeInfo) { ... }
이 validation은 동작하지 않는다. @Valid 어노테이션은 변수에 첨부되야함으로, 변수쪽으로 이동하자
@PostMapping public Id create(@RequestBody @Valid someInfo: SomeInfo) { ... }
참고 사이트
- https://stackoverflow.com/questions/36515094/kotlin-and-valid-spring-annotation
- https://kotlinlang.org/docs/annotations.html#java-annotations
- https://jojoldu.tistory.com/129