먼저 게시글을 정의하기 위해서 만들었던 PostDto.java 클래스를 살펴보자.
어떤 식으로 데이터를 넣어야하는지에 대한 정보가 없기 때문에 사용자의 입력을 검증하는 부분은 매우 중요하다.
스프링부트 프레임워크에서는 Jakarta Bean Validation이라는 명세를 사용해서 사용자의 입력을 검증한다.
간단하게 사용하는 법을 알아보자!
notNull, notEmpty, notBlank는 비슷하면서 조금씩 다르기 때문에 어떤 의미를 가지고 있는지 명확하게 알고가는 것이 좋다.
전에 진행했던 jpa 프로젝트에서 이어서 작성해보자. 먼저 build.gradle로 가서 20번째 줄 추가한다.
PostDto.java를 수정해보자.
이렇게 수정한다고 바로 실행되는 게 아니고 이 Dto를 실제로 사용하는 부분에서 정상적으로 만족하는 상태인지를 검증하는 부분이 필요하다. controller.java 에서 createPost 메소드에서 이를 사용하기 때문에 이 부분에서 아래와 같이 수정해준다.
(31번째 줄에 @Valid 추가)
그리고 포스트맨에서 아래와 같이
writer가 없는 글을 작성하려고 하면 저장되지 않고 오류가 뜬다. 그리고 콘솔을 확인하면 아래와 같은 문구가 뜨는 것을 확인할 수 있다.
Resolved [org.springframework.web.bind.MethodArgumentNotValidException: Validation failed for argument [0] in public void dev.khs.jpa.controller.PostController.createPost(dev.khs.jpa.PostDto): [Field error in object 'postDto' on field 'title': rejected value [null]; codes [NotNull.postDto.title,NotNull.title,NotNull.java.lang.String,NotNull]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [postDto.title,title]; arguments []; default message [title]]; default message [널이어서는 안됩니다]] ]
다음으로 content 부분을 길게 입력을 해보자.
마찬가지로 오류가 뜨고 콘솔창 오류메시지 끝 부분을 보면
default message [content],40,0]; default message [크기가 0에서 40 사이여야 합니다]] ]
이와 같이 출력이 된다.
마찬가지로 writer 부분도 길이가 3보다 짧고 10보다 큰 경우에도 오류가 뜬다.
또한 위와 해당하는 오류가 발생했을 때 같이 메시지도 작성할 수 있다.
notNull, notEmpty, notBlank 의 차이
- @NotNull : null이 아니면 통과
- @NotEmpty : null이 아니면서 Object.size()>0을 충족하면 통과 (내용물이 없는 인스턴스를 걸러냄 ex-"")
- @NotBlank : null이 아니면서 Object.size()>0을 충족하면서 공백이 아닌 문자열이면 통과 (ex-" "같은 경우를 걸러냄)