(SpringBoot) Controller Request 값 @valid를 이용한 검증

컨트롤러로부터 값을 받아 하나씩 검증하기 때문에 소스가 길어져 읽을 수 없게 되는 것을 방지하기 위해 @valid를 사용합니다.

1. build.gradle에 유효성 검사 종속성 추가

dependencies {
    implementation('org.springframework.boot:spring-boot-starter-validation')
}

2. 요청 클래스에 검증할 주석 추가

@Getter
@FieldDefaults(level = AccessLevel.PRIVATE)
public class CreateUserRequest {
    @NotBlank(message = "아이디를 입력해주세요.")
    String id;
    
    @Min(value = 8, message = "비밀번호는 8자리 이상 입력해주세요.")
    String password;
    
    @Email(message = "이메일 형식을 확인해주세요.")
    String email;
    
    @Pattern(regexp = "^(0-9)+$", message = "휴대폰번호는 숫자만 입력해주세요.")
    String mobileNumber;
}

>> 주석의 종류

@NotNull: 값이 null이 아닌지 확인합니다.

@NotEmpty: 값이 null이 아니고 빈 문자열(“”)이 아닌지 확인합니다. 공백(” “)이 허용됩니다.

@NotBlank: 값이 null, 빈 문자열(“”) 및 공백(” “)이 아닌지 확인합니다.

@AssertTrue : 값이 True인지 확인합니다.

@Size: 값이 주어진 값 사이에 속하는지 확인합니다.

@Min : @Min(value = 8) 값이 8자리 이상인지 확인합니다.

@Max : @Max(value = 10) 값이 10자리를 초과하는지 확인

@Pattern: regexp를 사용하여 정규식으로 값 유효성 검사

@Email : 이메일 형식이 올바른지 확인

다른 문서 보기 > https://javaee.github.io/javaee-spec/javadocs/javax/validation/constraints/package-summary.html

3. 컨트롤러에서 @Valid 수신

@PostMapping
@ResponseStatus(HttpStatus.CREATED)
public String signUp(@RequestBody @Valid CreateUserRequest request) {
    return "사용자 생성 완료";
}


* 컨트롤러에 값을 가져올 때 유효성 검사를 위해 @Valid를 사용했는데, DDD를 공부하고 도메인 측 유효성 검사 방법으로 변경하려고 합니다. 정답이 뭔지 모르겠네요…