쌓고 쌓다
[스프링 부트] BeanValidation 적용 - 29 본문
BeanValidation으로 검증 코드를 작성하지 않고
어노테이션 하나로 검증 로직을 편리하게 적용할 수 있다.
의존 관계 추가
implementation 'org.springframework.boot:spring-boot-starter-validation'
Poster 클래스
@Entity
@Getter
@Setter
@ToString
public class Poster {
@NotBlank
private String title;
@NotBlank
private String writer;
@NotBlank
private String content;
private LocalDateTime regdate;
@NotNull
@Range(min = 100, max = 250)
private Long height;
@NotNull
@Range(min=50, max = 200)
private Long weight;
}
@NotNull, @Range 같은 어노테이션으로 검증할 수 있다.
PosterController
@Slf4j
@Controller
@RequiredArgsConstructor
public class PosterController {
@PostMapping
public String write(@Validated @ModelAttribute Poster poster, BindingResult bindingResult) throws IOException {
if(bindingResult.hasErrors()) {
return "posters/createPosterForm";
}
}
}
자동으로 글로벌 Validator가 등록되어 있기 때문에 @Valid, @Validated만 적용하면 된다.
검증 오류가 발생하면 BindingResult에 FiledError, ObjectError를 담아준다.
스프링 부트는 자동으로 글로벌 Validator로 등록
"LocalValidatorFactoryBean"을 글로벌 Validator로 등록한다.
이 Validator는 @NotNull 같은 어노테이션을 보고 검증을 한다.
우린 @Valid, @Validated만 붙여주자.
검증 순서
- @ModelAttribute에 각 필드로 타입 변환하여 주입 시도
- 성공하면 2번 단계로.
- 실패시 typeMismatch로 FieldError 추가
- Validator 적용
여기서 보면 알겠지만. 바인딩에 성공한 필드에 대해서만 Bean Validation을 적용한다.
바인딩 성공하지 않은 필드에 대해서 typeMismatch 에러를 낸다.
BeanValidation 적용 결과
다음엔 에러 코드를 변경해보자!
'프로그래밍 > spring' 카테고리의 다른 글
Bean Validation의 에러 메시지(코드) 변경 (0) | 2023.09.12 |
---|---|
세션 사용하기 (0) | 2023.09.12 |
[스프링 부트] 모든 요청 로그 남기기(필터) - 28 (0) | 2023.09.10 |
서블릿 필터 (0) | 2023.09.10 |
[스프링 부트] 유효성 검사 @Validator - 27 (0) | 2023.09.09 |
Comments