관리 메뉴

취미개발 블로그와 마음수양

스프링 커스텀 밸리데이션 -> 코틀린 변환 본문

Language/Kotlin

스프링 커스텀 밸리데이션 -> 코틀린 변환

아라한사 2019. 10. 25. 19:04

주의사항 : 코틀린 초보가 적어보는 글.

 

빈 밸리데이션 스펙중에서 

https://beanvalidation.org/2.0/spec/#introduction

 

클래스레벨에서의 크로스 파라미터 체크 가 필요할 떄가 있다.

뭐 컨트롤러단에서도 해도 되겠지만, 클래스레벨로 해서 메타어노테이션으로 붙이고 싶은 개발자의 욕구가 들 때가 있다.

예를 들자면 두개의 필드 비교. 비밀번호와 비밀번호 확인이 같은 문자열체크같은 경우랄까

이러한 니즈가 몇군데서 중복되는 경우

클래스레벨에 밸리데이션 어노테이션을 걸기도했었다.

 

코틀린으로 토이프로젝트를 포팅중이었는데 해당 부분을 만나서 코틀린으로 바꿔보았다.

(아직도 어디가 var, val 이어야할지, nullable 은 어디가 가능할지 좀 고민스럽다ㅠ) 

 

자바와 조금 다른점은

 

어노테이션을 만들때는 annotation class 로

자바의 Class -> 코틀린의 KClass 로 바꿔줘야하고

중간의 out 을 해주게 되면, 즉 out Payload 의 의미는 Payload 타입에 맞는 Class<Payload> 가 된다는 의미였다

 

자바에서의 커스텀 밸리데이션 어노테이션을 만들어줄때 적는 Retention 어노테이션이 없는데,
코틀린에서는 리텐션 폴리시가 런타임이 디폴트라고 하여 생략되게 된다.

https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.annotation/-retention/index.html

 

BeanWrapperImpl 은 스프링 의존적인 부분인데, 어떤 오브젝트의 값들을 얻어올 때 쓰곤하였다.

 

https://gist.github.com/arahansa/48ae468930d2744c94d8fb28fe237356

 

빈밸리데이션 크로스 필드 체크

빈밸리데이션 크로스 필드 체크. GitHub Gist: instantly share code, notes, and snippets.

gist.github.com

 

 

'Language > Kotlin' 카테고리의 다른 글

인텔리제이 템플릿  (0) 2020.05.05
코틀린 JSR 303 밸리데이션 실패시  (0) 2019.11.11
코틀린 프로젝트들  (0) 2019.11.11
코틀린 로깅에 대한 토론  (0) 2019.10.12