Validation
BindingResult를 ModelAttribute뒤에 두어 요청에서 받아온 값에 오류가 있을경우 처리
Filed인 경우 - rejectValue
void rejectValue(@Nullable String field, String errorCode,
@Nullable Object[] errorArgs, @Nullable String defaultMessage);
예시
bindingResult.rejectValue("itemName","required");
bindingResult.rejectValue("price","range",new Object[]{1000,1000000},null);
Object인경우 - reject
void reject(String errorCode, @Nullable Object[] errorArgs, @Nullable String
defaultMessage);
예시
bindingResult.reject("totalPriceMin",new Object[]{10000,resultPrice},null);
- errorCode : message에 등록된 key값
- errorArgs : message에 등록된 arg에 들어갈 값,
- defaultMessage : message에 등록되지 않은 경우 담길 메세지
타입오류
Filed에 int로 지정된 입력창에 문자열이 들어올경우 터미널에 몇가지 에러코드가 담기게 되는데 그중 에러코드 하나를 message에 등록해 두면 사용 가능
에러코드
codes [typeMismatch.item.price,typeMismatch.price,typeMismatch.java.lang.Integer,typeMismatch];
default message
default message [Failed to convert property value of type 'java.lang.String' to required type 'java.lang.Integer' for property 'price'; nested exception is java.lang.NumberFormatException: For input string: "qq"
typeMismatch.item.price=가격은 숫자를 입력해주세요.
Validation코드 분리
- 분리한 클래스에 Validaator인터페이스 상속
- @Component를 사용하여 빈 등록
- 특정 타입(VO)에서만 검증을 하기 위해 supports메서드에 활용
ex) Item.class.isAssignableFrom(aClass); - 검증할 매핑 메서드 ModelAttribue앞에 @Validated추가
Validation Bean 사용
필드 에러
각 필드 생성시 어노테이션 추가
@NotBlank
private String itemName;
@NotNull
@Range(min = 1000, max = 1000000)
private Integer price;
@NotNull
@Max(value = 9999)
private Integer quantity;
검증 매핑 메서드 ModelAttribute앞에 @Validated 어노테이션 추가
Object에러
- Object에러는 스프링 빈을 사용하지 않고 기존 Validation방식으로 bindingResult.reject방식을 사용하여 에러메세지를 담는걸 권장합니다. 굳이 Validation Bean을 사용하는 방법은 구글에 Validation Bean group 검색
추가와 수정에 검증 조건이 다를경우
Validation Bean을 사용하게 되면 VO는 1개이므로 검증 어노테이션 조건을 따로 둘수 없으므로 생성할때 사용할 VO와 수정할 때 사용할 VO를 따로 구분하여 ModelAttribute에 사용하여 검증이 된 객체들을 기본 VO에 주입
'spring' 카테고리의 다른 글
API 예외처리 - HandlerExceptionResolver (0) | 2024.06.03 |
---|---|
Exception (0) | 2024.06.01 |
Spring Interceptor (0) | 2024.06.01 |
Spring Filter (0) | 2024.06.01 |
Session Cookies (0) | 2024.05.31 |