이전 버전에는 개별적인 Controller에서 @ExceptionHandler 를 활용해서 Exception을 모았었다.


공통화를 위해 고민해보다가 @ExceptionHandler 함수 구현을 상위 클래스에 두고 Controller에서 해당 클래스를 모조건 상속을 받게끔 하는 방법으로 해보았었는데.. 좀 찜짐한감이 없잖아 있었다..(불필요한 코딩 한자라도 줄이고 싶었다.., 또한 특정 템플릿을 강요하고 싶지도 않았다..)


아니면 Interceptor 에서 Exception을 Cache 하여 처리하는 방법으로 했다던가..


셈플링 해보던중.. @ControllerAdvice를 발견!!


상속, Interceptor 없이 모든 Exception을 모을 수 있다!!



1
2
3
4
5
6
7
8
9
10
11
12
13
14
@ControllerAdvice
public class DefaultControllerAdvice {
    private static final Logger logger = LoggerFactory.getLogger(DefaultControllerAdvice.class);
 
    @ExceptionHandler(RuntimeException.class)
    public ModelAndView handleRuntimeException(RuntimeException ex) {
        logger.error("에러임 RuntimeException: {}", ex);
        ModelAndView mv = new ModelAndView("error");
        mv.addObject("result", "999");
        mv.addObject("message", ex.getMessage());
        return mv;
    }
 
}


1
2
3
4
5
6
<mvc:annotation-driven />
<context:component-scan base-package="pe.kr.ddakker" use-default-filters="false">
    <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" />
    <context:include-filter type="annotation" expression="org.springframework.web.bind.annotation.ControllerAdvice" />
</context:component-scan>

+ Recent posts