항해99 TIL 4주차 - 26

강민범·2023년 11월 17일
0

backoffice 서버를 구현하던 도중 회원가입 기능에서 내가 전화번호 형식을 지정하고 싶다는 생각이 들었다.
내가 원하는 방식으로 유효성을 검사하는 방법을 알아본 결과 커스텀 밸리드애너테이션이 가능하다는 것을 알았다.

annotation/Tel.java

@Target(ElementType.FIELD) // 1
@Retention(RetentionPolicy.RUNTIME) // 2
@Constraint(validatedBy = TelValidator.class) // 3
public @interface Tel {
    String message() default "휴대폰 번호 입력 형식이 틀렸습니다."; // 4
    Class[] groups() default {};
    Class[] payload() default {};
}

default : 제약조건 위반시 전달할 메세지
groups : 유효성 검사 그룹을 위한 속성
payload : 사용되지는 않지만 지정해서 사용 가능

annotation/valid/TelValidator.class


public class TelValidator implements ConstraintValidator<Tel, String> { // 1

    @Override
    public boolean isValid(String value, ConstraintValidatorContext context) { // 2
        if (value == null) {
            return false;
        }

        return value.matches("(01[016789])-(\\d{3,4})-(\\d{4})");
    }
}

dto에 적용

@Getter
@Setter
public class SignupRequestDto {
    @Email
    @NotBlank
    private String email;
    @NotBlank
    private String password;
    @Tel
    private String phoneNumber;
    private char gender;
    private String phone;
    private String address;
    private String role;
}

controller에 @Valid 추가

    @PostMapping("/signup")
    public ResponseEntity<String> signup(@RequestBody @Valid SignupRequestDto requestDto) {
        memberService.signup(requestDto);
        return ResponseEntity.status(HttpStatus.CREATED)
                .body("회원가입 완료");
    }

테스트


정상적으로 입력을 한다면 010-2222-2222이 맞는데 '-'하나가 빠졌기 때문에 정상적으로 입력이 되지 않았다.

default message [phoneNumber]]; default message [휴대폰 번호 입력 형식이 틀렸습니다.]] ]


정상적으로 회원가입이 완료된것을 볼 수 있다.

profile
개발자 성장일기

0개의 댓글