본문 바로가기

STUDY/Spring

Spring Boot | spring-boot-starter-validation

의존성 추가

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

// Maven
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

 

자주 사용하는 어노테이션은 이정도가 있음..

 

  • @NotNull : 해당 값에 Null을 허용하지 않음
  • @NotBlank : Null을 허용하지 않으며 문자가 한 개 이상 포함되어야 함 (공백 제외)
  • @NotEmpty : Null을 허용하지 않으며 공백 문자열을 허용하지 않음
  • @AssertTrue : true인지 확인
  • @Min : 값이 Min보다 작은지 확인 
  • @Max : 값이 Max보다 큰지 확인
  • @Size : 값이 min과 max사이에 해당하는지 확인 (CharSequence, Collection, Map, Array에 해당)
 

Java Bean Validation Basics | Baeldung

Learn the basics of Java Bean validation, the common annotations and how to trigger the validation process.

www.baeldung.com

* NotNull / NotEmpty / NotBlank 차이

출처: https://www.appsdeveloperblog.com/validate-request-body-in-restful-web-service/

 

사용해보기!

유효성 검사를 할 필드에 어노테이션을 붙여준다. 

name은 Null일 수 없고, 길이가 64를 초과할 수 없다!

import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

public class Person {

    @NotNull
    @Size(max = 64)
    private String name;
    
    
    /* 생략 */

}

 

그리고 컨트롤러에서는 유효성 검사를 할 곳에 @Valid 어노테이션을 붙여준다. 주로 @RequestBody 앞에 붙게 된다.

@PostMapping(value = "/", produces = "application/json")
public ResponseEntity<?> sendSMS(@Valid @RequestBody Person person) {

	/* 생략 */

}

 

+) 이어 보면 좋은 글

기본적으로 제공하는 어노테이션 외에 직접 어노테이션을 만들어 유효성 검사할 수 있다!

 

Spring Boot | 유효성 검사 직접 만들기! (Custom Constraint)

기본적으로 제공되는 어노테이션 말고, 직접 만들어볼 수 있다. 1. 제약(Constraint) @interface 작성 여기서 message, groups, payload는 기본적으로 꼭 작성해주어야 하는 값이다. @Size(max = 10, message = "...

gaemi606.tistory.com

유효성 검사를 통과하지 못했을 때 발생한 exception을 @ControllerAdvice를 이용해 처리하는 법 (Error Response를 작성하는 법)

 

Spring Boot | @ControllerAdvice로 Exception 처리하기

참고! Spring Guide - Exception 전략 - Yun Blog | 기술 블로그 Spring Guide - Exception 전략 - Yun Blog | 기술 블로그 cheese10yun.github.io 0. Controller /messages URI로 POST요청을 하면, @Valid 어노테..

gaemi606.tistory.com


+) 참고

 

Difference between @Size, @Length and @Column(length=value) when using JPA and Hibernate

What is the difference between the validation check of the following three fields? @Entity public class MyEntity { @Column(name = "MY_FIELD_1", length=13) private String myField1; @Co...

stackoverflow.com

 

difference between @size(max = value ) and @min(value) @max(value)

I want to do some domain validation in my object I am having one integer, now my question is: if I write @Min(SEQ_MIN_VALUE) @Max(SEQ_MAX_VALUE) private Integer sequence; and @Size(min = 1, max =

stackoverflow.com