[Java] 유효성 검사 (Validation) / 검증 오류 DTO에 작성하는 방법

2023. 12. 24. 13:04Java

반응형

 

유효성 검사(Validation)

데이터의 일관성과 정확성을 보장

 

올바른 데이터인지 판별하는 것이 목적

@Validation 어노테이션으로 선언해서 사용

  1. View에서 DTO로 값을 전달 (Controller) - 설정
  2. DTO에서 값의 유효성을 검사 (DTO) - 설정 - 그룹변수를 필드로 부르기도 한다.
  3. 결과를 View에 전달 (Controller) - 설정

 


 

@NotNull

  • 해당 필드의 값이 null이 아닌지 검증
  • null을 허용하지 않음
  • null이면 오류발생
  • 정수형 뿐만 아니라 어떤 데이터 타입이든 사용 가능
    @NotNull (message = "이름은 필수 입력입니다.")
    private String name;
    
    @NotNull(message = "가격은 필수 입력입니다.")
    private Integer productPrice;


@NotEmpty

  • 주로 문자열, 컬렉션, 맵 등의 타입에서 사용
  • null이 아니고 크기가 0이 아닌지 검증
    @NotEmpty (message = "필수 입력입니다.")
    private List<String> items;


@NotBlank

  • 주로 문자열에서 사용되며
  • null이 아니고 빈 문자열이 아니며 공백 문자가 아닌지 검증
    @NotBlank (message = "이름은 필수 입력입니다.")
    private String username;


@Size

  • 주로 컬렉션, 맵, 문자열 등의 크기를 검증
  • 범위 값에 포함이 안되면 오류 발생
    @Size(min = 3, max = 10)
    private String description;​

@Min, @Max

  • 해당 필드의 값이 최소 혹은 최대값을 벗어나지 않는지 검증
    @Min(18)
    private int age;


@Email

  • 문자열이 이메일 주소의 형식을 갖추었는지 검증
  • 이메일 형식이 아니면 오류 발생
    @Email
    private String email;​

 

regexp

검증하고자 하는 패턴을 정의

^ 문자열의 시작  
\\d{숫지} @자리 숫자  
$ 문자열의 끝  
(?= ...) ...에 조건 나열 (?=.*[A-Z])은 문자열에 대문자가 적어도 1개는 포함
.* 0개 이상의 어떤 문자(또는 없음)를 나타냄 문자열의 시작부터 끝까지 아무 문자나 포함될 수 있다는 것을 의미

 

 

생년월일(날짜)

  • YYYY-MM-DD (예: 2023-12-24)
    @Pattern(regexp = "^\\d{4}-\\d{2}-\\d{2}$", message = "올바른 날짜 형식이 아닙니다 (YYYY-MM-DD)")
    private String birthDate;
  • YY-MM-DD (예: 23-12-24)
    @Pattern(regexp = "^\\d{2}-\\d{2}-\\d{2}$", message = "올바른 날짜 형식이 아닙니다 (YY-MM-DD)")
    private String birthDate;

 

 

전화번호

  • (XXX) XXXX-XXXX (예: (123) 4567-8901)
    @Pattern(regexp = "^\\(\\d{3}\\) \\d{4}-\\d{4}$", message = "올바른 전화번호 형식이 아닙니다 (XXX) XXXX-XXXX")
    private String phoneNumber;
  • XXX-XXXX-XXXX (예: 010-4567-8901)
    @Pattern(regexp = "^\\d{3}-\\d{4}-\\d{4}$", message = "올바른 전화번호 형식이 아닙니다 (XXX-XXXX-XXXX)")
    private String phoneNumber;

 

 

@Email

  • example@example.com
  • 이메일 주소의 일반적인 형식을 검사하는 패턴
    @Email
    private String email;​

 

비밀번호

  • 6자리 이상, 대문자 또는 특수문자 1개 이상 포함
     @Pattern(
            regexp = "^(?=.*[A-Z!@#$%^&*()_+\\-=\\[\\]{};':\"\\|,.<>\\/?])(?=.*.{6,})$",
            message = "비밀번호는 최소 6자 이상이며 대문자 또는 특수문자가 적어도 1개는 포함되어야 합니다"
        )
        private String password;
  • 대문자 1개 이상 포함 (자리수 제한x)
    @Pattern(
        regexp = "^(?=.*[A-Z]).*$",
        message = "대문자가 적어도 1개는 포함되어야 합니다"
    )
    private String password;
  • 특수문자 1개 이상 포함 (자리수 제한x)
    @Pattern(
        regexp = "^(?=.*[!@#$%^&*()_+\\-=\\[\\]{};':\"\\|,.<>\\/?]).*$",
        message = "특수문자가 적어도 1개는 포함되어야 합니다"
    )
    private String password;
  • 대문자, 특수문자 1개 이상 포함 (자리수 제한x)
    @Pattern(
        regexp = "^(?=.*[A-Z])(?=.*[!@#$%^&*()_+\\-=\\[\\]{};':\"\\|,.<>\\/?]).*$",
        message = "대문자가 1개 이상, 특수문자가 1개 이상 포함되어야 합니다"
    )
    private String password;

 

반응형

'Java' 카테고리의 다른 글

[Java] API / Open API / REST API  (0) 2023.12.23
[Java] 열거형 enum 사용 이유 및 사용 방법  (0) 2023.12.22
[Java] 객체(Object)의 정의  (0) 2023.12.22