⏰ 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>
를 가져올 수 있다.