Spring Bean 검증 - @NotNull , @NotBlank , @NotEmpty , @Size, @Valid , @Min, @Max , @Pattern

이정수·2025년 10월 24일

Spring

목록 보기
15/18

Validation Annotation : jakarta.validation.constraints
Spring Beanfield에 대해 작성제한 (글자수, 한글, 특수문자 등)을 적용할때 사용하는 유효성검사 용도의 어노테이션 Class를 포함하는 패키지

。보통 @Valid가 선언된 DTOField에 선언하여 서버에 전달되는 데이터에 대해 Validation을 수행

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

▶ 다음 의존성을 추가해야 @Range 등의 어노테이션을 활용가능

@NotNull , @NotBlank , @NotEmpty , @Size, @Min , @Max , @Valid

Spring Beanfield에 선언하는 경우 Data Binding된 값이 어노테이션의 제약조건에 부합하지 않는 경우 검증 실패하도록 설정

@Valid / @Validated :
RequestBodyDTO간의 Binding이 되기 이전 DTOfield에 선언된 Validation에 의해 Binding되는 값에 대하여 사전에 Validation을 먼저 수행하도록 설정하는 어노테이션
▶ 주로 DTO@RequestBody를 통해 바인딩 되는 Http RequestJSON파일 검증 시 사용

// 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로 전달되는 JSONMemberCreateRequest 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된 값( 문자열, 배열, 컬렉션 )의 크기가 minmax 사이인 경우에만 값을 저장하도록 유효성 검증.

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="정규표현식")
정규표현식으로 설정한 조건을 기반으로 선언된 필드입력값 검증
regexAI한테 물어보기

     @Pattern(regexp="^[0-9A-Za-z._%+-]+@[0-9A-Za-z.-]+\\.[A-Za-z]{2,6}$")
	String email     

@Min("숫자") , @Max("숫자")
Data Binding된 값( 숫자 )의 크기를 제한

profile
공부기록 블로그

0개의 댓글