[Java] 유효성 검사 (Validation) / 검증 오류 DTO에 작성하는 방법
2023. 12. 24. 13:04ㆍJava
반응형
유효성 검사(Validation)
데이터의 일관성과 정확성을 보장
올바른 데이터인지 판별하는 것이 목적
@Validation 어노테이션으로 선언해서 사용
- View에서 DTO로 값을 전달 (Controller) - 설정
- DTO에서 값의 유효성을 검사 (DTO) - 설정 - 그룹변수를 필드로 부르기도 한다.
- 결과를 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 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;
- 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 |