본문 바로가기

Language & Framework/삽질기록

삽질 기록(19) DTO에서 멤버 객체 유효성 검사하기

 

지난 프로젝트에서는 모든 요청을 날것(?)으로 받았었는데, 이번 프로젝트는 도메인이 예약이라 그런지 단순 커뮤니티 때보다 요청사항이 복잡해서 객체 형태로 연관된 데이터끼리 모아서 받고 있다.

 

 

이런 형태로 말이다.

근데 테스트 코드를 작성하던 도중 문제가 발생했다.

 

 

 

 

 

DTO 객체 내부의 값은 유효성 검사가 진행되지 않는다.

 

"아.. 이거 커스텀 어노테이션 만들어야하나..?" 라는 고민을 하다가 Baeldung에서 새로운 정보를 알게 되었다. 

 

 

 

https://www.baeldung.com/javax-validation-method-constraints(출처)

 

리턴 메서드에 어노테이션을 붙임으로서 값을 검증할 수 있다고 한다.

어노테이션 만들어서 해도 크게 어려울 건 없지만, 그래도 신문물 적용해보는 게 더 재미있다.

 

 

 

이렇게 붙여주고 다시 테스트를 돌려보자.

메서드를 따로 사용할 것은 아니기 때문에 private 접근자를 사용했다.

(끝까지 읽어보면 알겠지만 이거 말고 더 합리적인 방법이 있다.)

 

 

 

 

신나게 모두 성공한다.

성공한 건 좋은데 그냥 좋다고 끝나면 아쉬우니까 하이버네이트에서 validator에 대해 찾아봤다.

 

https://docs.jboss.org/hibernate/validator/5.1/reference/en-US/html/chapter-method-constraints.html#section-declaring-method-constraints

 

Chapter 3. Declaring and validating method constraints

As of Bean Validation 1.1, constraints can not only be applied to JavaBeans and their properties, but also to the parameters and return values of the methods and constructors of any Java type. That way Bean Validation constraints can be used to specify Not

docs.jboss.org

 

 

???

무슨 헛짓을 하고 있었던 거람.. 찾아보길 잘했다.

@Valid 어노테이션을 객체 위에 붙이는 것으로 객체 그래프를 탐색하며 재귀적인 검증을 수행한다고 한다.

심지어 Collection 클래스에 대한 검증도 지원한다. 궁금하면 들어가서 읽어보삼.

이걸 몰라서 저번 프로젝트 때 이상하게 검증했던 게 떠오르는군..

 

 

 

잘 작동한다.

역시 사람은 레퍼런스를 봐야해..