관리 메뉴

드럼치는 프로그래머

[Spring] @ControllerAdvice를 이용한 익셉션 처리 본문

★─Programing/☆─WebProgram

[Spring] @ControllerAdvice를 이용한 익셉션 처리

드럼치는한동이 2017. 4. 12. 17:38

스프링 프레임웍 3.2 이상부터 @ControllerAdvice라는 어노테이션이 추가 되었습니다.

 

이 어노테이션을 사용하면 간단하게 익셉션 발생시 작업을 처리할 수가 있습니다.


방법은 간단합니다. 설정파일에 아래와 같이 설정합니다. 아래의 설정 내용은 따로 설명하지 않겠습니다.

 

<annotation-driven />
<context:component-scan base-package="net.krespo" >


이후 적당한 위치에 클래스를 하나 생성하여 @ControllerAdvice를 붙여주면 됩니다.

 

package net.krespo.handler;
 
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.servlet.ModelAndView;
 
@ControllerAdvice
public class AnnotationExceptionHandler {
        @ExceptionHandler(Exception.class)
        public void handleException(Exception e) {
            System.out.println("exception");
        }
    
        @ExceptionHandler(RuntimeException.class)
        public ModelAndView handleRuntimeException(RuntimeException e) {
            ModelAndView mnv = new ModelAndView("exceptionHandler");
            mnv.addObject("data", e.getMessage());
        
            return mnv;
        }
}

 

클래스에는 @ControllerAdvice를 선언해 주고 각 메소드 마다 @ExceptionHandler라는 어노테이션으로 어떤익셉션을 처리할 것인지를 선언해 주면 됩니다.

 

익셉션을 처리하는 메소드는 익셉션 파라미터를 받을 수 있습니다. 그래서 개발자가 익셉션에 메세지를 담아서 던지면 해당 메세지를 각 핸들러 메소드에서 확인할수 있습니다.


또한 리턴값으로는 void부터 ModelAndView까지 다양하게 리턴할수 있어 익셉션을 처리하는데 편리하게 사용할 수 있습니다.

 

출처: http://krespo.net/191 [KRESPO.NET]

Comments