본문 바로가기

생존형 개발/Spring Framework

코틀린 + 스부 validation feat. messages.properties setting

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을 선택한다.
그 순서는

  1. param - (a contructor parameter)
  1. property = (자바는 접근할 수 없는 코틀린의 프로퍼티)
  1. 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) { ... }

 

참고 사이트

 

추가