본문 바로가기
✨ Back-end/etc

[Spring] 검증(Validation) -5 Validator 인터페이스

by 환풍 2023. 10. 6.
728x90
반응형

https://bright-landscape.tistory.com/407

 

[Spring] 검증(Validation) -4, rejectValue란?

[Spring] 검증(Validation) -3 , FieldError와 properties값 가져오기 [Spring] 검증(Validation) -2 BindingResult MemberController BindingResult 데이터 바인딩 과정에서 발생하는 검증 오류를 보유하고 있는 객체이다. 주로

bright-landscape.tistory.com

 

MemberValidator

supports 메서드는 특정 클래스의 유효성 검사를 지원하는지 여부를 확인한다.

이 구현에서는 주어진 클래스가 MemberVO로부터 할당 가능한지 확인하고, 가능하다면 true를 반환한다.

이는 MemberVO 인스턴스나 그 하위 클래스의 유효성을 검사할 수 있다는 것을 나타낸다.

 

validate 메서드는 유효성 검사를 수행하는 메서드이다. 주어진 target을 MemberVO 타입으로 캐스팅하여 member 변수에 저장한다. 이후에 유효성 검사 로직이 구현되어야 하지만, 현재는 아무 동작도 수행하지 않는다.

Errors는 BindingResult의 부모 클래스이다.

요약하면, 이 클래스는 Validator 인터페이스를 구현하여 MemberVO 인스턴스 또는 해당 하위 클래스의 유효성 검사를 지원한다. 그러나 validate 메서드에서 실제 유효성 검사 로직이 구현되어 있지 않는다.

 

Controller

컨트롤러에서 만들었던 bindingResult 대신에 error를 쓸수가 있게된다. 단, rejectValue로 설정했던것만 가져왔다.

 

MemberValidator

가져온 값들을 bindingResult대신 errors로 바꿔주었고, 컨트롤러에 있는 데이터들을 지우고,

클래스 위에 @Component시켜주었다.

 

DemoApplication

Component를 사용하기 위해서는 @ComponentScan을 지정해주어야 사용가능하다.

 

MemberController

이렇게 validate 처리를 해주면, 컨트롤러에서 엄청나게 많았던 코드들을 한줄로 바로 바꿔줄 수가 있어 아주 유용하다.

하지만, 위 코드도 지워줄 수 있다.

 

MemberController

MemberController 컨트롤러가 요청될 때 검증기를 넣어 항상 실행된다. 즉, 어떤 Mapping을 받더라도 이게 실행된다.

WebDataBinder에 검증기를 추가하면 해당 컨트롤러에서는 검증기를 자동으로 적용할 수 있게된다.

 

이후 memberValidator.validate( ) 를 주석처리하고, memberVO 객체에 @Validated 어노테이션을 추가해주면 끝이다.

@Validated는 검증기를 실행하라는 어노테이션이다. 이 어노테이션은 WebDataBinder에 등록한 검증기를 찾아서 실행한다. 만약 여러 검증기를 등록했을때, 그 중 어떤 검증기가 실행되야할지 구분되어야하는데, 이때 supports( ) 가 사용된다.

그때 바로, @Validated에 있는 MemberVO가 적용되면서,

 

MemberValidator

MemberVO를 적용시켜 true가 되면 아래 validate 메소드가 실행되며 호출되는 것이다.

728x90
반응형

댓글