Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- Java
- programmers
- 자료구조
- JPA
- 자바
- 객체지향프로그래밍
- OS
- 반복문
- 알고리즘
- 웹개발
- 네트워크
- 스파르타코딩
- 쿼리dsl
- 검증
- 코딩테스트
- 스프링
- 메서드
- 면접
- 스프링 MVC
- 백준
- 정처기
- 프로그래머스
- Bean Validation
- 스프링MVC
- 운영체제
- 브루트 포스
- 자바의 정석
- ModelAttribute
- 코테
- db
Archives
- Today
- Total
개발일지
스프링MVC_검증(Bean Validation 직접 사용) 본문
728x90
목차
직접 검증 코드를 작성하는 것은 상당히 번거롭다.
특히, 특정 필드에 대한 검증 로직은 대부분 빈 값인지 아닌지, 특정 크기를 넘는지 아닌지와 같이 매우 일반적인 로직이다.
다음 코드를 보자
public class Item {
private Long id;
@NotBlank
private String itemName;
@NotNull
@Range(min = 1000, max = 1000000)
private Integer price;
@NotNull
@Max(9999)
private Integer quantity;
//...
}
이런 검증 로직을 모든 프로젝트에 적용할 수 있게 공통화하고, 표준화한 것이 바로 Bean Validation이다.
Bean Validation을 잘 활용하면, 애노테이션 하나로 검증 로직을 매우 편리하게 적용할 수 있다.
Bean Validation - 시작(스프링 통합X, 순수한 Bean Validation 사용법)
Bean Validation 의존 관계 추가
build.gradle에 의존관계 추가
implementation 'org.springframework.boot:spring-boot-starter-validation'
테스트 코드 작성
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(9999)
private Integer quantity;
public Item() {
}
public Item(String itemName, Integer price, Integer quantity) {
this.itemName = itemName;
this.price = price;
this.quantity = quantity;
}
}
- @NotBlank : 빈값 + 공백만 있는 경우를 허용하지 않는다.
- @NotNull : null 을 허용하지 않는다.
- @Range(min = 1000, max = 1000000) : 범위 안의 값이어야 한다.
- @Max(9999) : 최대 9999까지만 허용한다
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 = " + violation.getMessage());
}
}
}
검증기 생성 (스프링과 통합하면 작성하지 않아도 되기에 참고만 하기!)
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
실행결과(일부생략)
violation={interpolatedMessage='공백일 수 없습니다', propertyPath=itemName,
rootBeanClass=class hello.itemservice.domain.item.Item,
messageTemplate='{javax.validation.constraints.NotBlank.message}'}
violation.message=공백일 수 없습니다
violation={interpolatedMessage='9999 이하여야 합니다', propertyPath=quantity,
rootBeanClass=class hello.itemservice.domain.item.Item,
messageTemplate='{javax.validation.constraints.Max.message}'}
violation.message=9999 이하여야 합니다
violation={interpolatedMessage='1000에서 1000000 사이여야 합니다',
propertyPath=price, rootBeanClass=class hello.itemservice.domain.item.Item,
messageTemplate='{org.hibernate.validator.constraints.Range.message}'}
violation.message=1000에서 1000000 사이여야 합니다
728x90
'Spring > Spring MVC' 카테고리의 다른 글
로그인 처리 - 서블릿 HTTP 세션 (0) | 2023.03.21 |
---|---|
스프링MVC_검증(Bean Validation-스프링 적용) (0) | 2023.03.20 |
스프링MVC_검증(스프링이 제공하는 검증 오류 처리 방법) (0) | 2023.03.18 |
스프링MVC_검증(직접 처리) (0) | 2023.03.17 |
스프링 MVC - 웹 페이지 만들기(2) (0) | 2023.03.17 |
Comments