Spring Boot; Exception

🗓️

부트에서 예외처리

  • 아래의 3가지 방법이 있다.
  1. 자바의 방법 : try/catch 사용
  2. 컨트롤러 단위 : 각각의 컨트롤러에서 @ExceptionHandler 사용
  3. 전역 처리 : @ControllerAdvice을 사용한 전역 예외처리

@ExceptionHandler는 중복코드가 발생한다고 한다.. 여기서 나올 중복 코드가 그 중복이 아닐텐데..

@ControllerAdvice

  • 스프링 3.2에서 추가됨.
  • Annotation만으로 추가 설정없이 예외 처리 가능.
@ControllerAdvice
@Slf4j
public class ExceptionHandler {

    @org.springframework.web.bind.annotation.ExceptionHandler(Exception.class)
    public ModelAndView defaultExceptionHandler(HttpServletRequest request, Exception exception) {
        ModelAndView modelAndView = new ModelAndView("/error/defaultError");
        modelAndView.addObject("defaultError", exception);

        log.error("defaultExceptionHandler", exception);

        return modelAndView;
    }
  • @ControllerAdvice : 예외처리 객체임을 알림.
  • @org.springframework.web.bind.annotation.ExceptionHandler(Exception.class) : 예외 발생시 처리할 예외의 지정. (여기서는 예제기 때문에 모든 예외) 실제 개발에서는 필요한 예외에 따라 구현해야한다.
  • modelAndView : 예외시 보여줄 view의 지정
  • modelAndView.addObject() : view(template)에 전달
  • log.error() : 콘솔에 에러 역시 출력

근데 템플릿 추가해서 보니 내부 코드에 대한 예외는 처리하는데 없는 페이지 같은 500 에러에 대해서는 처리하지않는다.. 이걸 dispatcher servlet앞의 필터로 하는건가? -> 찾아본 글