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


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


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


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


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



@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;
    }

}


	
	<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