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

[Spring] 검증(validation) - 6 Bean Validation @어노테이션

by 환풍 2023. 10. 10.
728x90

 

build.gradle

implementation 'org.springframework.boot:spring-boot-starter-validation'

위 implementation을 한줄 추가해주면 validation을 사용할 수 있다. 추가 후 refresh gradle project.

 

MemberVO

VO에가서 어노테이션 NotBlank와 Range, NotNull과 Max에 validation.constraints를 사용할 수 있는걸 볼 수 있다.

@NotBlank - 빈값 + 공백만 있는 경우 허용하지 않는다.

@NotNull -  null을 허용하지 않는다.

@Range(min = ~ , max = ~ ) - 범위 안의 값이어야 한다.

@Max(99) - 최대 99까지만 된다.

 

MemberController

@Validated만 추가해주면, 알아서 bindingResult로 에러값을 갖고 갈 수 있다.

 

 


아이디와 비밀번호를 공백으로 두고, 나이를 조건에 맞지 않게 두고 완료를 눌러 보았다.

콘솔창에는 VO에서 생성한 어노테이션 기반으로 에러가 뜨게 된다.

@NotBlank

  • NotBlank.memberVO.memId
  • NotBlank.memId
  • NotBlank.java.lang.String
  • NotBlank

@Range

  • Range.memberVO.memAge
  • Range.memAge
  • Range.int
  • Range

즉 이것들만 필드 에러 메시지를 등록해주면 된다.

application.properties에 errors 메시지를 사용할 basename을 지정하고,

errors.properties를 만들어 NotBlank 에러 메세지를 띄운다. 이후 공백을 입력하면 적용된 것을 볼 수 있다.

레벨별로 지정했으므로, 세부적으로 지정하게 되면 그에 맞는 에러들만 메시지가 출력될 것이다.

 

그런데 현재 MemberVO에 어노테이션을 주면서 로그인 할때 NotBlank를 줬는데, 만약 회원가입 할때에는 NotBlank가 필요없을 상황이 있을 수도 있다. 이럴땐 BeanValidation groups를 사용하여 각각 정의내려야한다.


LoginCheck 인터페이스와 MemberVO 클래스

이런식으로 Interface를 만들어놓고, VO에서 groups을 통해 적용하도록 지정해줄 수 있다.

Controller

컨트롤러에서 joinCommit 메소드에 있는 @Validated어노테이션에 LoginCheck.class를 넣어 적용시켜주었다.

value = 가 생략됨,

그러면 MemberVO에서 group으로 지정했던 것만 적용이 되는데,

위 결과 화면과 같이 모두 공백을 넣어 완료 버튼을 눌렀지만, 이름에만 적용된 것을 확인할 수 있다.

만약 두개의 컨트롤러에서 사용하고 싶다면 이렇게 { } 중괄호를 이용해 그룹을 두개 지정해주면 된다.

반응형

댓글