프로젝트를 진행 하면서 예외처리를 구현해야 하는 경우가 생겼다. 이 때 보통 try & catch를 통해서 진행을 하였지만 컨틀로러 단에서 코드가 길어질 뿐만 아니라 매번 작성을 해줘야 한다는 문제점이 생겼고 ControllerAdivce라는 어노테이션을 발견하여 기록을 남긴다.
@ControllerAdvice
란 Controller나 RestController에서 발생한 예외를 다루기 쉽게 처리하도록 도와주는 어노테이션이다. 이러한 어노테이션을 사용하면 에러처리를 전역적으로(Controller, RestController) 관리할 수 있다.
@ControllerAdvice
public class ContorllerExceptionHandler {
@ExceptionHandler(CustomException.class)
public ResponseEntity<?> helloException(CustomException e) {
...
return new ResponseEntity<>(BasicError.of(HttpStatus.BAD_REQUEST, e.getMessage, HttpStatus.BAD_REQUEST);
}
}
위 코드처럼 에러 핸들러를 만들고 그 안에 ExceptionHandler어노테이션을 통해 CustomException에 선언된 에러가 발생하면 해당 로직을 수행하게된다.
RestControllerAdvice는 ControllerAdvice랑 유사하지만 ResponesBody를 추가한 의미이다. 이는 RestController에서만 동작하며 주로 API 서버와 JSON형식으로 통신하는 곳에 많이 사용된다.
@RestControllerAdvice(annotation = RestController.class)
public class ContorllerExceptionHandler {
@ExceptionHandler(CustomException.class)
public ResponseEntity<?> helloException(CustomException e) {
...
return new ResponseEntity<>(BasicError.of(HttpStatus.BAD_REQUEST, e.getMessage, HttpStatus.BAD_REQUEST);
}
}