자바 @Valid 종류와 사용법

최준석·2022년 12월 1일

Today I Learned

목록 보기
1/4

스프링으로 클라이언트에서 넘어온 데이터를 다루게 되면 특정 조건에 맞는지 검증해야 되는 경우가 많이 생긴다. 이때 사용하는 어노테이션이 @Valid@Validation 두 가지인데, JSR 표준인 @Valid의 종류와 사용법에 대해 정리해 봤다.

해당 어노테이션을 사용하기 위해서 아래 디펜던시를 삽입해주면 된다.

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

사용예시)

Controller

@RestController
@RequiredArgsConstructor
@RequestMapping("/user")
public class UserController {

    @PostMapping("/create")
    @ApiOperation(value = "회원 등록")
    public ResponseEntity<Void> createUser(@Valid @RequestBody SaveRequest requestDto) {
        userService.save(requestDto);

        return CREATED;
    }
}

DTO

public static class SaveRequest {

        @NotBlank(message = "이메일 주소를 입력해주세요")
        @Email(message = "이메일 형식에 맞춰 입력해주세요")
        private String email;

        @NotBlank(message = "비밀번호를 입력해주세요")
        @Size(min = 8, max = 20, message = "비밀번호는 8자 이상 20자 이하로 입력해주세요")
        @Pattern(regexp = PASSWORD, message = "숫자, 문자, 특수문자 중 2가지를 조합해 입력해주세요")
        private String password;

        @NotBlank(message = "닉네임을 입력해주세요")
        @Size(min = 3, max = 12, message = "닉네임은 3자 이상 12자 이하로 입력해주세요")
        private String nickname;

        @NotBlank(message = "이름을 입력해주세요")
        @Size(min = 2, message = "2자 이상 올바른 이름을 입력해주세요")
        private String name;

        @NotBlank(message = "휴대폰 번호를 입력해주세요")
        @Pattern(regexp = PHONE, message = "올바른 휴대폰번호를 입력해주세요")
        private String phone;
    }

종류

어노테이션설명가능한 자료형
@NotNullnull 비허용모든 자료형
@Nullnull만 허용모든 자료형
@NotEmptynull, "" 비허용CharSequence, Collection, Map, Array
@NotBlanknull, "", " "비허용CharSequence
@Size(min=, max=)min이상 max이하 문자열 허용CharSequence, Collection, Map, Array
@Pattern(regex=, flag=)정규식 검증CharSequence
@Max(숫자)숫자 이하 값 허용BigDecimal, BigInteger, byte, short, int, long, 정수 자료형 wrapper
@Min(숫자)숫자 이상 값 허용BigDecimal, BigInteger, byte, short, int, long, 정수 자료형 wrapper
@Future현재시간보다 미래 허용Date, Calendar
@Past현재시간보다 과거 허용Date, Calendar
@Positive양수만 허용BigDecimal, BigInteger, CharSequence, byte, short, int, long, float, double, 숫자 자료형 wrapper
@PositiveOrZero0 + @PositiveBigDecimal, BigInteger, CharSequence, byte, short, int, long, float, double, 숫자 자료형 wrapper
@Negative음수만 허용BigDecimal, BigInteger, CharSequence, byte, short, int, long, float, double, 숫자 자료형 wrapper
@NegativeOrZero0 + @NegativeBigDecimal, BigInteger, CharSequence, byte, short, int, long, float, double, 숫자 자료형 wrapper
@Email이메일 형식만 허용CharSequence
@Digits(integer=, fraction=)정수 자리수가 integer값 이하이고 소수 자리수가 fraction값 이하BigDecimal, BigInteger, CharSequence, byte, short, int, long, 정수 자료형 wrapper
@DecimalMax(value=)value(실수) 이하 허용BigDecimal, BigInteger, CharSequence, byte, short, int, long, 정수 자료형 wrapper
@DecimalMin(value=)value(실수) 이상 허용BigDecimal, BigInteger, CharSequence, byte, short, int, long, 정수 자료형 wrapper
@AssertTruetrue만 허용boolean, Boolean
@AssertFalsefalse만 허용boolean, Boolean
profile
Back-End Web Developer

0개의 댓글