ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Spring Boot] 값 검증하기 - Spring Validation
    개발/개발일지 2023. 12. 4. 15:46

    프로젝트에서 회원가입을 구현하기 위해서 필요한 정보를 dto로 전송받고 있었다.

    signUp(@RequestBody SignUpDto dto) {
    public record SignUpDto(
            String email,
            String handle,
            String username,
            String password
    ) {
    }

    코틀린에서는 String타입에 null이 들어갈 수 없기 때문에 모든 필드를 작성해야 하지만, 자바에서는 몇 필드가 없거나 null이어도 그대로 null값으로 전송된다. portpolent에서는 Entity의 설정에 nullable을 false로 해놨기 때문에 SQL Exception이 나고 결과적으로 500 Internal Error가 반환된다. 그렇다고 매 코드에 if를 쓰고 정규표현식을 써서 검사하기엔 반복되는 코드가 많고 지저분해진다. 그럴때 쓰는 방법이다.

     

    Spring Validation을 사용하기 위해 의존성을 추가한다.

    implementation 'org.springframework.boot:spring-boot-starter-validation'

     

     

    Validation을 사용하면 요청을 받을 때 인자들을 검수하고 조건에 맞지 않으면 400 Bad Request로 종료시킨다. validation을 활성화 하려면 controller의 인자에 @Valid를 붙여주면 된다.

    signUp(@RequestBody @Valid SignUpDto dto) {

    SignUpDto의 각 필드에 필요한 설정을 적용하면 끝이다.

    package io.yeahx4.portpolent.dto.user;
    
    import jakarta.validation.constraints.Email;
    import jakarta.validation.constraints.NotNull;
    import jakarta.validation.constraints.Size;
    
    public record SignUpDto(
            @Email
            @Size(max = 100)
            @NotNull
            String email,
    
            @Size(min = 4, max = 20)
            @NotNull
            String handle,
    
            @Size(min = 2, max = 10)
            @NotNull
            String username,
    
            @NotNull
            String password
    ) {
    }

     

     

    자주 쓰는 annotation

    • NotNull : null이 아니여야 한다
    • Size : min ~ max사이의 길이를 가져야 한다. 수의 크기와는 다르다.
    • Min, Max : 숫자형의 최대, 최소를 설정한다.
    • Email : 이메일 형태의 자료인지 확인한다.
    • Pattern : 정규 표현식으로 검증한다.
YEAHx4