javax.validation 패키지 (spring-boot-starter-validation)

- 스프링부트 버전 2.3.0부터는 starter web에 디펜던시로 spring-boot-starter-validation  제외되서, 별도로 추가

 

@Valid 사용법

1)유효성 검사를 할 Entity 클래스의 속성에 @Valid의 제약조건 적용

2)데이터가 유효하다면 아무일도 일어나지 않음.

3)데이터가 유효하지 않을 시, 그에 대한 에러 정보를 BindingResult 변수에 직접 담아줌.

 

1. 디펜던시(dependency) 추가

1) Maven

Pom.xml

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-validation</artifactId>
	<version>2.4.2</version>
</dependency>

 

2) gradle

build.gradle

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-validation'
	implementation 'org.springframework.boot:spring-boot-starter-web'
}

 

2.  @Valid 사용

2-1) Controller

- 컨트롤러에서는 매개변수에 @Valid 어노테이션을 추가하면 된다.

@PostMapping(value = "/validCheck")
public String validCheck(@ModelAttribute @Valid MemberDto memberDto, BindingResult result){
    System.out.println("== valid Check ==");
    }

 

2-2)  Service

- Service나 Bean에서는 Class 위에 @Validated도 추가해줘야 한다.

@Validated
@Service
public class MemberService {
	@PostMapping("/validCheck")
    public void MemberValidCheck(@Valid MemberDto memberDto) {
    	 }
}

 

 

3. 주요 어노테이션

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

 

 

 

 

 

4. 예외 처리

4-1) ConstraintViolationException 에러

- 유효성 검사 실패 시, ConstraintViolationException (500) 예외 발생

- ConstraintViolationException은 실패 정보를 담고 있는 ConstraintViolation 객체로, 적절한 오류 응답 ExceptionHandler를 생성해야된다.

 

4-2) BindingResult

- 검증 오류 발생 시, 스프링 프레임워크에서 제공하는, 오류 내용을 보관하는 객체
- BindingResult 객체의 파라미터 위치는 반드시 @ModelAttribute 어노테이션이 붙은 객체 다음에 위치해야 한다


'JAVA > spring' 카테고리의 다른 글

@Valid 비밀번호 유효성 검사  (0) 2022.06.03
lombok(롬복) 설치 및 적용  (0) 2022.03.24
타임리프(Thymeleaf)  (0) 2022.03.23
Spring directory 구조  (0) 2022.03.12
스프링 프로젝트 생성 (이클립스)  (0) 2021.12.24

+ Recent posts