[SPRING] Validation - 데이터 검증

김승수·2024년 6월 18일
0

SPRING

목록 보기
18/27

⏰ 2024. 06. 18 화

✔ 스프링 이론 강의를 듣고 정리하면서 작성했습니다.

💡 목차

  1. Validation 이란?
  2. Bean Validation
  3. Validation 적용 예제
  4. Validation 예외처리

Validation - 데이터 검증하기

Validation 이란?

  • 프로그래밍 하는데 있어서 데이터를 검증하는 과정은 가장 중요한 부분 중 하나이다.

  • 특히, Java는 null 값에 대한 접근에서 NullpointException 예외가 발생하기 때문에 이러한 부분을 예방하기 위한 검증하는 과정이 필요하다.

  • Spring에서는 null 확인 뿐만 아니라 문자의 길이 측정과 같은 검증도 쉽게 처리할 수 있도록 Bean Validation을 제공한다.

Bean Validation

  • 간편한 사용을 위한 여러 애너테이션(@)을 제공한다.

  • 애너테이션 종류

  1. @NotNull : null 불가
  2. @NotEmpty : null, "" 불가
  3. @NotBlank : null, "", " " 불가
  4. @Size : 문자 길이 측정
  5. @Max : 최댓값
  6. @Min : 최소값
  7. @Positive : 양수
  8. @Negative : 음수
  9. @Email : 이메일 형식
  10. @Pattern : 정규 표현식

Validation 적용 예제

  • RequestDto - 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;
}
  • ProductController > testValid() - @Vaild 적용
...

@PostMapping("/validation")
@ResponseBody
public ProductRequestDto testValid(@RequestBody @Valid ProductRequestDto requestDto) {

	return requestDto;
    
}

...
  • @Valid 애너테이션을 입력받는 ProductRequestDto 앞에 사용하여 Object(ProductRequestDto)의 Validation 실행한다.

  • 또한, @RequestBody로 입력받는 객체뿐만 아니라 @PathVariable, @RequestParam으로 입력 받는 필드에도 @Valid, @Validated를 사용하여 Vaildation을 사용 가능하다.

Validation 예외처리

  • Validation을 사용해서 발생한 예외를 처리하기 위해 BindingResult를 사용한다.

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";
}
  • bindingResultgetFieldErrors() 메서드를 통해 발생한 오류들에 대한 정보가 담긴 List<FieldError> 를 가져올 수 있다.
profile
개발하는 미어캣

0개의 댓글