이와 같은 Annotation을 객체 또는 변수에 붙여 손쉽게 값에 대한 유효성을 검사할 수 있으며, 유효성 문제가 발생시 Exception 처리를 통해 에러 메시지를 리턴할 수 있다. 또한 @NotBlank(message = "")와 같은 형태로 유효성 문제 발생시 출력할 message를 작성할 수 있다.
발생 예외
- BindException @ModelAttribute로 객체를 전달받을때 발생한다. - MethodArgumentNotValidException @ResponseBody로 데이터를 전달 받을때 발생한다. 또한 BindException을 상속받는 Exception Class 이다.
BindingResult
BindingResult 객체는 검증 오류가 발생한 경우 오류 정보를 저장하는 객체이다. 해당 객체를 통해 필드명, 객체명, 에러 메시지등 을 확인, 사용할 수 있다.
Exception에서 전달받은 BindingResult 객체의 fieldError 에서 파라미터, 전달받은 값, 에러 코드(사용 어노테이션), 설정한 message 등을 추출하여 사용할 수 있다.
POST Method API 구현 및 @Valid 를 통한 유효성 검증
프로젝트 환경설정
start.spring.io
Framework :SpringBoot 2.7.12 | JDK :JAVA 11 | IDE :IntelliJ | DB :OracleDB | build Tool :Gradle
게시글 테이블(POST_TBL)에 데이터를 추가하는 코드다. POST /posts 를 통해 postSubject와 postContent, postWriter를 Post 객체로 전달받아 Service > Repository를 통해 DB에 insert 한다. 만약 postSubject 또는 postContent,postWriter 가 null 이거나 스페이스 값인 경우와 postWriter가 이메일 형식을 따르지 않은 경우 @Valid 어노테이션을 통해 MethodArgumentNotValidException을 발생시켜 해당하는 해당하는 HTTP 상태 코드와 에러 메시지를 출력한다. GlobalExceptionHandler에서 MethodArgumentNotValidException을 처리하고 해당 하는 상태 코드와 에러메시지를 ErrorResponse 객체를 통해 만들어 리턴한다.
결과
정상 작동시 DB에 데이터 insert와 결과 201, 생성 완료 문구 확인
400 : Bad Request 와 함께 에러에 대한 내용 출력되는 것을 확인했다.
필수 값이 스페이싱 값일 경우 동일하게 400 : Bad Request 에러를 발생 시킴을 확인했다.