에러 처리 (ControllerAdvice)
- 요청 처리 도중 에러 발생 시 일괄 에러처리 방법
ControllerAdvice
- 컨트롤러에서 클라이언트의 요청을 처리하다 에러 발생 시 에러처리를 일괄적으로 할 수 있다.
- 여러 컨트롤러에서 발생 하는 에러를 한곳에서 커스텀하게 처리할 수 있다.
ex) jwt 토큰 만료 Exception 처리
-
먼저 처리할 Exception을 상속받아 구현한다.
-
해당 에러 발생시 보낼 HttpStatus를 정의할 수 있다. (@ResponseStatus를 사용해 HttpStatus 정의)
@ResponseStatus(value = HttpStatus.UNAUTHORIZED, reason = "Token Expired") public class JwtExpiredException extends ExpiredJwtException { private static final long serialVersionUID = -5516940974076682738L; public JwtExpiredException(Header header, Claims claims, String message) { super(header, claims, message); } public JwtExpiredException(Header header, Claims claims, String message, Throwable cause) { super(header, claims, message, cause); } }
-
-
전역으로 에러를 처리할 ControllerAdvice를 생성한다.
- 컨트롤러에 @ControllerAdvice 어노테이션을 등록한다.
-
@ExceptionHandler에 처리할 Exception을 명시한다.
@ControllerAdvice public class ExceptionController { @ExceptionHandler(value = JwtExpiredException.class) public ResponseEntity<ErrorResponse> handleJwtExpiredException(RuntimeException e, HttpServletRequest request) { log.debug("JwtExpiredException"); ErrorResponse errorResponse = getErrorResponse(HttpStatus.UNAUTHORIZED, e, request); log.debug("ErrorResponse : {}", errorResponse); return ResponseEntity.status(errorResponse.getError()).body(errorResponse); } }
-
에러내용 객체를 생성하여 원하는 메시지를 구성하여 보낼수 있다.
@Builder @Getter @Setter @ToString public class ErrorResponse { private int status; private HttpStatus error; private String message; @JsonFormat(pattern = "yyyy/MM/dd HH:mm:ss") private LocalDateTime errorTime; private String path; }
'IT > Spring' 카테고리의 다른 글
설정파일 YAML (0) | 2019.04.30 |
---|---|
메이븐 (Maven) (0) | 2019.04.30 |
인터셉터 (Interceptor) (0) | 2019.04.29 |
Spring 요청 메소드 (Request Mapping) (0) | 2019.04.13 |
URI 패턴 맵핑 (0) | 2019.04.07 |
댓글