ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Spring Boot] 에러 메세지 커스터마이징 하기
    개발/개발일지 2023. 12. 14. 23:53

    스프링 부트 3이전의 구버전에서는 ResponseEntityExceptionHandler을 상속해서 아래의 메소드를 오버라이딩하는 방식으로 접근할 수 있었다.

    @Override
    protected ResponseEntity<Object> handleMethodArgumentNotValid(
            MethodArgumentNotValidException ex,
            HttpHeaders headers,
            WebRequest request
    ) {
        ...
    }

     

    스프링 부트 3부터는 상속대신 어노테이션을 통해 접근하는 것으로 바뀌었지만 내부 구현 자체는 똑같다. 필자는 HTTP 응답을 일관적으로 data, message, status필드로 구성하고 있으므로 이 형식에 맞춰 구현했다.

     

    @ControllerAdvice
    public class GlobalExceptionHandler {
        @ExceptionHandler(MethodArgumentNotValidException.class)
        protected ResponseEntity<Object> handleMethodArgumentNotValid(
                MethodArgumentNotValidException ex,
                WebRequest request
        ) {
            Map<String, Object> body = new HashMap<>();
            List<String> errors = ex
                    .getBindingResult()
                    .getFieldErrors()
                    .stream()
                    .map(it -> it.getDefaultMessage())
                    .toList();
    
            body.put("status", "Error");
            body.put("data", null);
            body.put("message", errors);
    
            return new ResponseEntity<>(body, HttpStatus.BAD_REQUEST);
        }
    }

     

    이메일을 비웠을 경우 아래와 같은 결과를 얻을 수 있다.

     

    참고

    위의 저 메세지는 dto의 validation에서 정의한 값이다.

    @NotBlank(message = "Email Required")
    @Email
    @Size(max = 100)
    String email,

     

    '개발 > 개발일지' 카테고리의 다른 글

    [Spring Boot] 값 검증하기 - Spring Validation  (0) 2023.12.04
    Spring boot 초기 세팅 및 DB 연결  (2) 2023.12.03
YEAHx4