코드 그라데이션
Bean Validation - 시작 및 프로젝트 세팅 V3 본문
Bean Validation - 시작
Bean Validation 기능을 어떻게 사용하는지 코드로 알아보자.
먼저 스프링과 통합하지 않고, 순수한 Bean Validation 사용법 부터 테스트 코드로 알아보자.
Bean Validation 의존관계 추가
build.gradle
dependencies 에다가
implementation 'org.springframework.boot:spring-boot-starter-validation'
Jakarta Bean Validation
- jakarta.validation-api : Bean Validation 인터페이스
- hibernate-validator 구현체
테스트 코드 작성
Item - Bean Validation 애노테이션 적용
package hello.itemservice.domain.item;
import lombok.Data;
import org.hibernate.validator.constraints.Range;
import javax.validation.constraints.Max;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
@Data
public class Item {
private Long id;
@NotBlank
private String itemName;
@NotNull
@Range(min = 1000, max = 1000000)
private Integer price;
@NotNull
@Max(value = 9999)
private Integer quantity;
public Item() {
}
public Item(String itemName, Integer price, Integer quantity) {
this.itemName = itemName;
this.price = price;
this.quantity = quantity;
}
}
- 이 어노테이션들의 임포트를 유의깊게 보자.
BeanValidationTest - Bean Validation 테스트 코드 작성
package hello.itemservice.validation;
import hello.itemservice.domain.item.Item;
import org.junit.jupiter.api.Test;
import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;
import java.util.Set;
public class BeanValidationTest {
@Test
void beanValidation() {
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
// 지금 일부러 틀린 값들을 주입
Item item = new Item();
item.setItemName(" "); //공백
item.setPrice(0);
item.setQuantity(10000);
Set<ConstraintViolation<Item>> violations = validator.validate(item);
for (ConstraintViolation<Item> violation : violations) {
System.out.println("violation=" + violation);
System.out.println("violation.message=" + violation.getMessage());
}
}
}
#1.
> 이게 빈 값이면(출력이) 문제가 없는 것이고, 값이 들어있으면 문제가 있는 것.
현재는 틀린 값이 들어있으므로 당연히 값이 출력될 것이다.
#2. 검증기 생성
다음 코드와 같이 검증기를 생성한다. 이후 스프링과 통합하면 우리가 직접 이런 코드를 작성하지는 않으므로,
이렇게 사용하는구나 정도만 참고하면 된다.
#3. 검증 실행
검증 대상( item )을 직접 검증기에 넣고 그 결과를 받는다.
Set 에는 ConstraintViolation 이라는 검증 오류가 담긴다. 따라서 결과가 비어있으면 검증 오류가 없는 것이다.
테스트 실행 결과
violation=ConstraintViolationImpl{interpolatedMessage='1000에서 1000000 사이여야 합니다',
propertyPath=price,
rootBeanClass=class hello.itemservice.domain.item.Item,
messageTemplate='{org.hibernate.validator.constraints.Range.message}'}
violation.message=1000에서 1000000 사이여야 합니다
violation=ConstraintViolationImpl{interpolatedMessage='공백일 수 없습니다',
propertyPath=itemName,
rootBeanClass=class hello.itemservice.domain.item.Item,
messageTemplate='{javax.validation.constraints.NotBlank.message}'}
violation.message=공백일 수 없습니다
violation=ConstraintViolationImpl{interpolatedMessage='9999 이하여야 합니다',
propertyPath=quantity,
rootBeanClass=class hello.itemservice.domain.item.Item,
messageTemplate='{javax.validation.constraints.Max.message}'}
violation.message=9999 이하여야 합니다
- ConstraintViolation 출력 결과를 보면, 검증 오류가 발생한 객체, 필드, 메시지 정보등 다양한 정보를 확인할 수 있다.
프로젝트 준비 V3
1) ValidationItemControllerV3 컨트롤러 생성
- ValidationItemControllerV2 복사 -> ValidationItemControllerV3 생성
- URL 경로 변경: validation/v2/ -> validation/v3/
경로 변경 단축키 Ctrl + V
2) 템플릿 파일 복사
- /resources/templates/validation/v2/ -> /resources/templates/validation/v3/
- URL 경로 변경 : validation/v2/ -> validation/v3/
경로 변경 단축키 Ctrl + Shift + R
실행해서 잘 유지되는지 확인하기
728x90
'Spring > Validation' 카테고리의 다른 글
Bean Validation - 에러 코드 (0) | 2024.03.02 |
---|---|
Bean Validation - 스프링 적용 (0) | 2024.03.02 |
Bean Validation - 소개 (0) | 2024.02.29 |
Validator 분리 (2) (0) | 2024.02.28 |
Validator 분리 (1) (0) | 2024.02.28 |
Comments