본문 바로가기
Spring & Spring Boot 실무 가이드

[Spring] validation @NotNull @NotEmpty @NotBlank

by devcomet 2023. 10. 24.
728x90
반응형

스프링 벨리데이션 어노테이션중 NotNull, NotEmpty, NotBlank 3가지의 차이점을 간단하게 알아보려고 합니다.

우선 결론은 아래와 같습니다만 검증을 위해 예제를 만들어봅시다.

 

NotNull - null만 사용불가

NotEmpty - null, "" 사용불가

NotBlank - null, "", " " 사용불가

제약 조건 null 빈 문자열("") 공백 문자열(" ")
NotNull 사용 불가 허용 허용
NotEmpty 사용 불가 사용 불가 허용
NotBlank 사용 불가 사용 불가 사용 불가

 

셋팅

1. spring validation 의존성 추가

Spring validation

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

 

2. dto 추가

// main/java/com/example/demo/dto/MemberRequestDto.java
@Setter
@Getter
@ToString
public class MemberRequestDto {
    @NotNull
    private String name;
    private int age;
}

 

3. controller 추가

// main/java/com/example/demo/controller/MemberController.java
@RestController
public class MemberController {

    @PostMapping("/v1/member")
    public ResponseEntity<MemberRequestDto> memberInsert(@Valid @RequestBody MemberRequestDto memberRequestDto) {
        return ResponseEntity.ok(memberRequestDto);
    }
}

 

4. http 추가

// main/http/member.http
POST http://localhost:8080/v1/member
Content-Type: application/json

{
  "name" : "sumin",
  "age" : 30
}

 

5. 셋팅이 잘 되었는지 확인 - http파일 실행해보기

디폴트 셋팅 실행결과

validation 적용할때 중요한점이, 컨트롤러쪽에서 아규먼트에 @Valid 넣어주셔야 체크가 시작됩니다.

셋팅이 완료되었고 오늘의 주제인 NotNull, NotEmpty, NotBlank 바로 확인 해볼게요

 

1. @NotNull

@NotNull에 null 넣어보기

NotNull인 name에 null을 넣으니 > Bad Request에러가 나옵니다

 

@NotNull에 "" 넣어보기

빈 문자열 > 통과

 

@NotNull에 " " 넣어보기

스페이스 > 통과

 

NotNull > null만 사용불가 > 검증완료

 

2. @NotEmpty

@NotEmpty에 null 넣어보기

null > Bad Request

 

@NotEmpty에 "" 넣어보기

"" -> Bad Request

 

@NotEmpty에 " " 넣어보기

" " -> 통과

 

@NotEmpty > null, "" 사용불가 > 검증완료

 

3. @NotBlank

@NotBlank에 null 넣어보기

null > Bad Request

 

@NotBlank에 "" 넣어보기

"" > Bad Request

 

@NotBlank에 " " 넣어보기

" " > Bad Request

 

@NotBlank > null, "", " " 사용불가 > 검증완료


 

전체 검증이 완료 되었다

 

사진을 덕지덕지 붙이니까 현타가 오는데... 다음번에 단순 반복 검증이 필요할때는

테스트코드로 작성해서 올려야겠다

 

추가적으로

@NotNull @NotEmpty @NotBlank 어노테이션에 메세지를 넣을 수도 있는데,

단순히 메세지만 쓴다고해서 바로 받을 수 있는건 아니고, BindingResult를 이용해서 뽑아내야된다.

 

위 내용을 controllerAdvice를 사용해서 공통예외처리를 하는 방식의 글을 꼭 쓰도록 하겠습니다!

 

 

참고자료

https://www.baeldung.com/java-bean-validation-not-null-empty-blank

 

728x90
반응형