스프링 벨리데이션 어노테이션중 NotNull, NotEmpty, NotBlank 3가지의 차이점을 간단하게 알아보려고 합니다.
우선 결론은 아래와 같습니다만 검증을 위해 예제를 만들어봅시다.
NotNull - null만 사용불가
NotEmpty - null, "" 사용불가
NotBlank - null, "", " " 사용불가
제약 조건 | null | 빈 문자열("") | 공백 문자열(" ") |
NotNull | 사용 불가 | 허용 | 허용 |
NotEmpty | 사용 불가 | 사용 불가 | 허용 |
NotBlank | 사용 불가 | 사용 불가 | 사용 불가 |
셋팅
1. 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인 name에 null을 넣으니 > Bad Request에러가 나옵니다
빈 문자열 > 통과
스페이스 > 통과
NotNull > null만 사용불가 > 검증완료
2. @NotEmpty
null > Bad Request
"" -> Bad Request
" " -> 통과
@NotEmpty > null, "" 사용불가 > 검증완료
3. @NotBlank
null > Bad Request
"" > Bad Request
" " > Bad Request
@NotBlank > null, "", " " 사용불가 > 검증완료
전체 검증이 완료 되었다
사진을 덕지덕지 붙이니까 현타가 오는데... 다음번에 단순 반복 검증이 필요할때는
테스트코드로 작성해서 올려야겠다
추가적으로
@NotNull @NotEmpty @NotBlank 어노테이션에 메세지를 넣을 수도 있는데,
단순히 메세지만 쓴다고해서 바로 받을 수 있는건 아니고, BindingResult를 이용해서 뽑아내야된다.
위 내용을 controllerAdvice를 사용해서 공통예외처리를 하는 방식의 글을 꼭 쓰도록 하겠습니다!
참고자료
https://www.baeldung.com/java-bean-validation-not-null-empty-blank
'스프링&스프링부트' 카테고리의 다른 글
[spring] AOP(관점 지향 프로그래밍) 이해하기: 실용적인 예제로 배우는 AOP (1) | 2024.01.21 |
---|---|
[Spring] yml 암호화를 해보자(feat. jasypt) (2) | 2024.01.03 |
[Spring] 메세지 컨버터란 (Spring message converter) (5) | 2023.11.01 |