본문 바로가기
Java

@NotBlank과 @NotNull를 사용하는 이유

by sangyunpark99 2024. 7. 17.
package com.example.payment.transfer.dto.reqeust;

import jakarta.validation.constraints.DecimalMin;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import java.math.BigDecimal;
import org.hibernate.validator.constraints.Length;

public record TransferRequest(
        @NotBlank(message = "출금 계좌 번호는 필수로 입력해야 합니다.") @Length(min = 10, max = 10)
        String withdrawalAccountNumber,

        @NotBlank(message = "입금 계좌 번호는 필수로 입력해야 합니다.") @Length(min = 10, max = 10)
        String depositAccountNumber,

        @NotNull(message = "이체할 금액은 필수로 입력해야 합니다.") @DecimalMin("1")
        BigDecimal transferAmount,

        @NotNull(message = "계좌의 비밀번호는 필수로 입력해야 합니다.")
        String accountPassword
) {
}

 

@NotBlank와 @NotNull 어노테이션을 사용해서, 필요한 값이 꼭 들어오도록 구현해주었다.

Controller에서 @Valid 어노테이션을 사용함으로써, 적절하지 않은 값이 들어오지 않을 경우 Exception을 터트려 준다.

터진 Exception은 구현해준 @ControllerAdvice에서 ExceptionHandler로 예외를 잡아 적절한 Response를 응답해준다.

 

🔎 꼬리에 꼬리를 무는 질문

Q. @NotBlank란 무엇인가?

어노테이션이 사용되는 element는 null과 적어도 공백이 아닌 문자가 하나 존재해야 한다.

CharSequence에만 허용된다.

 

Q. @NotNull이란 무엇인가?

어노테이션이 사용되는 element는 null이 되면 안된다. 

모든 Type에 허용된다.

 

내가 사용한 궁극적인 이유

원하지 않는 값이 Request로 들어 올 경우 예외 @Valid을 사용하여 예외를 핸들링 해주고 싶어 사용하게 되었다.