-
[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