[Spring] Spring 검증 기능2 (Bean Validation)
1. Bean Validation
- 어노테이션을 사용하여 간단한 필드 검증 로직을 할 수 있게 하는 것
- 자바 기술 표준 중 하나
- 검증 어노테이션과 여러 인터페이스의 모음
- 일반적으로
hibernate-validator
구현체 사용 → ORM과 관련X spring-boot-starter-validation
라이브러리를 의존관계에 추가하여 사용
2. 검증 어노테이션
@NotNull
: null을 허용하지 않음@NotBlank
: 빈값 혹은 공백만 있는 경우를 허용하지 않음@Range(min = 10, max = 100)
: 범위 안의 값이어야 함@Max(100)
: 최대 100까지 허용@Min(100)
: 최소 100까지 허용- 이외에도 다양한 검증 어노테이션들이 있다. Reference
message
로 기본 메시지 값을 설정할 수 있다.
3. 검증 순서
@ModelAttribute
가 있는 객체에서 각각 필드에 타입 변환을 시도- 실패하면 typeMissmatch로 FieldError에 추가 후 다음으로
- 성공하면 다음으로
- Validator 적용
- 바인딩이 성공한 필드에만 적용
ObjectError는??
@ScriptAssert
로 처리가 가능- 하지만 오브젝트 오류(글로벌 오류) 같은 경우에는 복잡한 경우가 많으므로 직접 자바 코드로 구현하는 편이 낫다.
4. @Valid
, @Validated
차이
@Validated
- 스프링 전용 검증 어노테이션
- groups라는 기능 존재
- groupd을 정해서 서로 다른 동작일때 다른 값으로 검증 가능
- 개발할 때 보통 기능을 나누기 때문에 사용하지 않음
- groupd을 정해서 서로 다른 동작일때 다른 값으로 검증 가능
@Valid
- 자바 표준 검증 어노테이션
- 어떤것을 쓰던 Bean Validation은 잘 작동 함
5. HttpMessageConverter에서의 검증
@ModelAttribute
는 각각의 필드를 바인딩하기 때문에 바인딩이 성공한 필드에 대해서는 검증이 가능- 하지만 HttpMessageConverter(ex)
@RequestBody
사용)은 전체 객체 단위로 성공 or 실패가 결정되기 때문에 메시지 컨버터가 작동이 실패하면 검증이 안됨
※ 참고
'FRAMEWORK > [SPRING]' 카테고리의 다른 글
[Spring] 스프링 필터(Filter) vs 인터셉터(Interceptor) (0) | 2022.08.09 |
---|---|
[Spring] Jar vs War (0) | 2022.06.27 |
[Spring] Spring 검증 기능1 (BindingResult, Validator) (0) | 2022.06.07 |
[Spring] HttpMessageConverter (0) | 2022.06.06 |
[Spring] Spring MVC 구조 (0) | 2022.06.05 |