스프링 프레임웍 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까지 다양하게 리턴할수 있어 익셉션을 처리하는데 편리하게 사용할 수 있습니다.
'Framework > SPRING FRAMEWORK' 카테고리의 다른 글
[Spring 3.2] Interceptor에서 Controller의 어노테이션 체크하기 (2) | 2013.12.02 |
---|---|
[Spring Framework] @RequestParam을 사용하여 List형 데이터 받을때 주의점 (2) | 2013.11.14 |
[Spring Framework] @Transactional로 구현한 트랜젝션에서 수동 rollback 하기 (5) | 2013.11.14 |
Spring - Spring + iBatis 연동시 iBatis Transaction 실행 안되는 문제 (0) | 2010.12.13 |
Spring - Quartz를 사용하여 스케쥴러 구현하기 (12) | 2010.09.29 |