⏰ 2024. 06. 18 화
✔ 스프링 이론 강의를 듣고 정리하면서 작성했습니다.
Validation - 데이터 검증하기
프로그래밍 하는데 있어서 데이터를 검증하는 과정은 가장 중요한 부분 중 하나이다.
특히, Java는 null 값에 대한 접근에서 NullpointException 예외가 발생하기 때문에 이러한 부분을 예방하기 위한 검증하는 과정이 필요하다.
Spring에서는 null 확인 뿐만 아니라 문자의 길이 측정과 같은 검증도 쉽게 처리할 수 있도록 Bean Validation을 제공한다.
간편한 사용을 위한 여러 애너테이션(@)을 제공한다.
애너테이션 종류
package com.spring.dto.product;
import jakarta.validation.constraints.*;
import lombok.Getter;
@Getter
public class ProductRequestDto {
@NotBlank
private String name;
@Email
private String email;
@Positive(message = "양수만 가능합니다.")
private int price;
@Negative(message = "음수만 가능합니다.")
private int discount;
@Size(min=2, max=10)
private String link;
@Max(10)
private int max;
@Min(2)
private int min;
}
...
@PostMapping("/validation")
@ResponseBody
public ProductRequestDto testValid(@RequestBody @Valid ProductRequestDto requestDto) {
return requestDto;
}
...
@Valid 애너테이션을 입력받는 ProductRequestDto 앞에 사용하여 Object(ProductRequestDto)의 Validation 실행한다.
또한, @RequestBody로 입력받는 객체뿐만 아니라 @PathVariable, @RequestParam으로 입력 받는 필드에도 @Valid, @Validated를 사용하여 Vaildation을 사용 가능하다.
BindingResult를 사용한다.예외가 발생하면 BindingResult 객체에 오류에 대한 정보가 담긴다.
@Vaild가 적용된 메서드의 입력 파라미터로 BindingResult 객체를 받아올 수 있다.
@PostMapping("/user/signup")
public String signup(@Valid SignupRequestDto requestDto, BindingResult bindingResult) {
// Validation 예외처리
List<FieldError> fieldErrors = bindingResult.getFieldErrors();
if(fieldErrors.size() > 0) {
for (FieldError fieldError : fieldErrors) {
log.error(fieldError.getField() + " 필드 : " + fieldError.getDefaultMessage());
}
return "redirect:/api/user/signup";
}
userService.signup(requestDto);
return "redirect:/api/user/login-page";
}
bindingResult의 getFieldErrors() 메서드를 통해 발생한 오류들에 대한 정보가 담긴 List<FieldError> 를 가져올 수 있다.