SpringBoot Validation 예외 처리

song yuheon·2023년 9월 7일
0

Spring

목록 보기
64/93
post-thumbnail

@Valid란?


@Valid는 Java Bean Validation을 이용해서 객체의 유효성을 검사하는 데에 사용하는 어노테이션이다.
Spring Framework에서 @Valid 어노테이션을 사용하면 Controller 메서드의 매개변수로 전달되는 객체의 유효성을 검사할 수 있다.


예외처리 예시


    @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";
    }

@Getter
@Setter
public class SignupRequestDto {
    @NotBlank
    private String username;
    @NotBlank
    private String password;
    @Email
    @NotBlank
    private String email;
    private boolean admin = false;
    private String adminToken = "";
}

@Valid SignupRequestDto requestDto는 SignupRequestDto 객체의 유효성 검사를 트리거한다. 유효성 검사는 SignupRequestDto 내에 정의된 어노테이션들 (@NotBlank, @Email 등)을 기반으로 진행된다. 만약 유효성 검사에서 오류가 발생한다면, 해당 오류들은 BindingResult 객체에 리스트 형태로 저장된다.

--

Plus


@Valid 예외 처리 세부 동작


  1. Controller Method에 @Valid 사용:

    • Controller의 메서드에서 @Valid를 사용하여 객체의 유효성을 검사할 수 있다.
    public String register(@Valid User user, BindingResult bindingResult) { ... }
  2. BindingResult 사용:

    • 유효성 검사에서 오류가 발생하면, 해당 오류들은 BindingResult 객체에 저장된다.
    • BindingResult 객체는 @Valid 어노테이션을 사용한 객체 바로 뒤에 위치해야 한다.
    • bindingResult.hasErrors() 메서드를 사용하여 오류가 있는지 확인할 수 있다.
    • bindingResult.getFieldErrors()를 사용하면 발생한 모든 필드 오류를 가져올 수 있다.
  3. Error Handling:

    • BindingResult를 사용하여 오류가 발생한 경우, 해당 오류를 처리하거나 사용자에게 오류 메시지를 보여줄 수 있다.
    if (bindingResult.hasErrors()) {
        // Handle validation errors
    }
  4. Custom Error Messages:

    • 객체의 필드에 어노테이션을 사용하여 유효성 규칙을 지정하고, 메시지 속성을 사용하여 커스텀 오류 메시지를 지정할 수 있다.
    public class User {
        @NotBlank(message = "Username cannot be empty!")
        private String username;
        ...
    }
  5. Global Error Handling:

    • @ControllerAdvice@ExceptionHandler를 사용하여 전역적으로 유효성 검사 오류를 처리할 수 있다. 이렇게 하면 각 컨트롤러 메서드에서 오류를 처리하는 대신 중앙 집중식으로 오류를 처리할 수 있다.
  6. Custom Validations:

    • 기본 제공되는 유효성 검사 어노테이션 외에도 사용자 정의 유효성 검사를 구현할 수 있다.

profile
backend_Devloper

0개의 댓글