Java

[Spring] Controller Request 값 @valid 이용하여 검증하기

솔솔 2023. 4. 16. 16:18
반응형

Controller에서 값을 받아 일일이 값을 검증해주다보니 소스가 길어지고 가독성이 안좋아지는 것 방지하고자 @valid를 사용하게 되었다.

 

1. build.gradle 에 validation 의존성 추가

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

 

2. Request Class 에 검증할 어노테이션 추가

@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. Controller에서 @Valid로 받기

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

 

* @Valid를 사용하여 Controller에 값을 가져올 때 유효성 체크를 했는데 DDD를 공부하면서 도메인 쪽에서 검증하는 방식으로 바꿔보려한다.. 뭐가 정답인지는 모르겠어요..

반응형