Validation Annotation :
jakarta.validation.constraints
。Spring Bean의field에 대해작성제한(글자수, 한글, 특수문자 등)을 적용할때 사용하는유효성검사용도의어노테이션 Class를 포함하는패키지
。보통@Valid가 선언된DTO의Field에 선언하여서버에 전달되는데이터에 대해Validation을 수행implementation 'org.springframework.boot:spring-boot-starter-validation'▶ 다음
의존성을 추가해야@Range등의어노테이션을 활용가능
。@NotNull,@NotBlank,@NotEmpty,@Size,@Min,@Max,@Valid
。Spring Bean의field에 선언하는 경우Data Binding된 값이어노테이션의 제약조건에 부합하지 않는 경우검증 실패하도록 설정
@Valid/@Validated:
。RequestBody와DTO간의Binding이 되기 이전DTO의field에 선언된Validation에 의해Binding되는 값에 대하여 사전에Validation을 먼저 수행하도록 설정하는어노테이션
▶ 주로DTO와@RequestBody를 통해바인딩되는Http Request의JSON파일검증 시 사용// Bean에 대해 Validation 을 수행 public record MemberCreateRequest( @NotBlank String loginId, // 최소 8자 이상 대문자 소문자 숫자 특수문자 포함 @NotBlank @Pattern(regexp="^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[!@#$%^])[A-Za-z\\d!@#$%^]{8,}$") String password ){} @PostMapping("/members") @ResponseStatus(HttpStatus.CREATED) public void create(@Valid @RequestBody MemberCreateRequest request)▶
HTTP Request Body를 통해Controller로 전달되는JSON을MemberCreateRequest DTO객체로역직렬화하기 전@Valid를 통해DTO내 정의된Validation 어노테이션들을 통해필드값에 부합하는지검증
@NotNull:
。Data Binding된 값( 모든참조 타입 객체)이null이 아니어야 한다.
▶null값만 차단하며""의 경우는 허용
@NotEmpty
。Data Binding된 값(String,Collection,Map,Array)이null이 아니면서길이 > 0을 만족
▶null과""를 모두 차단
@NotBlank
。Data Binding된 값(String)이null이 아니면서trim후길이 > 0을 만족
@Past:
。Data Binding된 값이현재시점을 기준으로과거시점이어야 한다.
@Past(message="에러메세지"):
。검증 실패 시 표현될 메시지.
@Size:
。Data Binding된 값(문자열,배열,컬렉션)의 크기가min과max사이인 경우에만 값을 저장하도록 유효성 검증.
。JPA혹은Hibernate로부터 독립적인 Spring Bean 생성
。위반하여Validation Error이 발생하면 이는BindingResult의객체에 의해 검출될 수 있음.@Size(min = 10, message="Enter at least 10 characters") private String description;
@Size( min="최솟값" ): 입력값의 최솟값 설정@Size( max="최댓값" ): 입력값의 최댓값 설정@Size( message="에러메세지" ): 검증 실패 시 표현될 메시지.
ex )@Size(min=2, message = "Enter at least 2 characters")
@Pattern(regexp="정규표현식")
。정규표현식으로 설정한조건을 기반으로 선언된필드의입력값 검증
▶regex는AI한테 물어보기@Pattern(regexp="^[0-9A-Za-z._%+-]+@[0-9A-Za-z.-]+\\.[A-Za-z]{2,6}$") String email
@Min("숫자"),@Max("숫자")
。Data Binding된 값(숫자)의 크기를 제한