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을 사용하여 예외를 핸들링 해주고 싶어 사용하게 되었다.
'Java' 카테고리의 다른 글
🔎 synchronized는 정말 동기화를 해주는가? (0) | 2024.07.19 |
---|---|
@SoftAssertions를 사용하는 이유 (0) | 2024.07.17 |
BigDecimal의 compareTo 메서드 파헤치기 (0) | 2024.07.17 |
🔎 SoftAssertions의 각 Assertions는 독립적인가? (0) | 2024.07.16 |
@NoArgsConstructor(access = AccessLevel.PROTECTED)를 사용하는 이유 (0) | 2024.07.15 |