좀 치는 스프링 스터디
https://github.com/woowacourse-study/2022-gugu-spring-study
글로벌 범위 Validator와 컨트롤러 범위 Validator
Validator의 공통된 사용 방법
- @Valid 를 사용하여 커맨드 객체에 검증 기능을 적용
- 커맨드 객체? : HttpServletRequest 를 통해 들어온 요청 파라미터
1. 글로벌 범위 Validator
설정방법
설정클래스에서 WebMvcConfigurer의 getValidator()가 검증객체를 리턴하도록 구현
@Configuration
@EnableWebMvc
public class MvcConfig implements WebMvcConfigurer {
@Override
public Validator getValidator() {
return new 검증객체();
}
}
적용
@PostMapping("/register/step3")
public String handleStep(@Valid RegisterRequest request, Errors errors) {
if (errors.hasErrors()){
return "register/step2"
}
...
}
- handleStep을 실행하기전, @Valid 붙은 파라미터를 글로벌 Validator로 검증
- 검증 수행 결과는 Errors 타입 파라미터로 받음
- Errors가 없으면 에러 발생함
글로벌 Validator의 범용성
- 모든 컨트롤러에 적용할 validator가 있을까? 적절치 않은 것 같다.
2. 컨트롤러 범위 Validator
설정방법 : @InitBinder
@InitBinder
protected void initBinder(WebDataBinder binder) {
binder.setValidator(new 검증객체());
}
- 적용방법은 위 글로벌 Validator와 같다.
WebDataBinder
- 내부적으로 Validator 목록을 갖는다.
- 글로벌 Validator가 포함된다.
- setValidator : 사용시 기존 Validator를 삭제하고, 파라미터로 받은 Validator를 목록에 추가한다.
- addValidator : 사용시 기존 Validator 목록에 파라미터로 받은 Validator를 목록에 추가한다.
3. Bean Validation
Validator 작성 없이 애노테이션 만으로 커맨드 객체의 값 검증을 처리
설정방법
public class RegisterRequest {
@NotBlank
@Email
private String email;
@Size(min = 6)
private String password;
}
- 커맨드클래스에서 Bean Validation, 프로바이더에서 제공하는 애노테이션을 이용해 검증 규칙을 설정 → Component 처럼 설정 가능한 대상으로 지정
- Bean Validation을 적용한 커맨드 객체를 검증할 OptionalValidatorFactoryBean을 등록
- @EnableWebMvc를 사용하면 OptionalValidatorFactoryBean 을 글로벌 Validator로 등록한다
- @SpringBootApplication 의 @EnableAutoConfiguration 은 내부적으로 @EnableWebMvc과 동일한 기능
자주쓰는 Bean Validation
- AssertTrue, AssertFalse : 값 true, false 검사
- DecimalMax, DecimalMin : 지정 값보다 작거나 같은지 / 크거나 같은지 검사
- Max, Min
- Digits : 자릿수
- Size
- Null, NotNull
- Pattern : 정규식
- Positive, PositiveOrZero
- Negative, NegativeOrZero
- Future, FutureOrPresent : 미래시간 검사
- Past, PastOrPresent : 과거시간 검사
'공부 > Spring' 카테고리의 다른 글
[chap14] MVC 4 : 날짜 값 변환, @PathVariable, 익셉션 처리 (0) | 2022.06.02 |
---|---|
[chap13] MVC 3 : 세션, 인터센터, 쿠키 (0) | 2022.06.02 |
[chap11] MVC 1: 요청 매핑, 커맨드 객체, 리다이렉트, 폼 태그, 모델 (1) | 2022.05.27 |
[chap10] 스프링 MVC 프레임워크 동작 방식 (0) | 2022.05.27 |
[chap8] DB연동 (0) | 2022.05.27 |
댓글