[Spring] Validation

thingzoo·2023년 6월 30일
0

Spring

목록 보기
42/54
post-thumbnail
post-custom-banner

Validation이란?

프로그래밍을 하는데에 있어서 가장 중요한 부분 중 하나

  • 특히나 Java는 null 값에 대한 접근에 대해 NullPointerException 오류가 발행하기 때문에 이러한 부분을 예방하기 위해 Validation 즉, 검증 과정이 필요하다.
  • Spring에서는 null 확인 뿐 아니라 문자의 길이 측정과 같은 다른 검증 과정도 쉽게 처리할 수 있도록 Bean Validation을 제공하고 있다.

Bean Validation

  • 간편하게 사용할 수 있는 여러 애너테이션을 제공해준다.
  • 자주 사용하는 일부 애너테이션을 보자.
namecontent
@NotNullnull 불가
@NotEmptynull, “” 불가
@NotBlanknull, “”. “ “ 불가
@Size문자 길이 측정
@Max최대값
@Min최소값
@Positive양수
@Negative음수
@EmailE-mail 형식
@Pattern정규 표현식

Validation 적용

프로젝트 설정

build.gradle : validation 추가

implementation 'org.springframework.boot:spring-boot-starter-validation'

예시

Dto

  • Validation 적용을 원하는 멤버에 적절한 애너테이션 추가
@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;
}

Controller

  • Validation 적용을 해둔 타입의 인자에 @Valid 추가
@PostMapping("/validation")
@ResponseBody
public ProductRequestDto testValid(@RequestBody @Valid ProductRequestDto requestDto) {
    return requestDto;
}

Validation 예외처리

  • 회원가입 진행 시 데이터 검증 시 오류가 발생했을 때 로그인 페이지가 아니라 회원가입 페이지로 이동 하려면 Validation 예외를 처리해야한다.
      

BindingResult

  • 예외가 발생하면 BindingResult 객체에 오류에 대한 정보가 담긴다.
  • 파라미터로 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 : bindingResult.getFieldErrors()) {
            log.error(fieldError.getField() + " 필드 : " + fieldError.getDefaultMessage());
        }
        return "redirect:/api/user/signup";
    }

    userService.signup(requestDto);

    return "redirect:/api/user/login-page";
}
  • bindingResult.getFieldErrors()
    • 발생한 오류들에 대한 정보가 담긴 List<FieldError> 리스트를 가져옵니다.
profile
공부한 내용은 바로바로 기록하자!
post-custom-banner

0개의 댓글