트랜잭션 결과가 의도한 상태가 아닐 경우 

일일이 조건문을 만들어 에러코드를 설정하는 것은 번거롭고 중복 코드를 발생시키는 일이다.

간단히 입셉션으로 처리하고 입셉션을 따로 관리하는 클래스와 페이지를 만든다면 편리다.

스프링은 이를 위해 Interface HandlerExceptionResolver를 사용한다.

빈등록에는 많은 방법들이 있는데

@ControllerAdvice 애노테이션을 이용하는 방법이 있다.

@ControllerAdvice(value="test.mapping") public class ExceptionAdivisor { @ExceptionHandler(InsertException.class) public ModelAndView handleInsertException(InsertException e) { System.out.println("ControllerAdvice: "+e); ModelAndView mav = new ModelAndView("/common/insertError"); mav.addObject("exception", e); return mav; } }


사용 방법은 아주 간단하다.

@ControllerAdvice(value="적용 패키지") 를 적용한 클래스를 만들고

@ExceptionHandler(예외 클래스) 를 적용한 메서드를 만들면 된다.

파라메터로 입섹션을 받을 수 있고

return값은 뷰리졸버에 의해 처리 되기때문에 ModelAndView를 적용할 수 있다.

@ControllerAdvice가 아닌 @Controller 클래스에 @ExceptionHandler 메서드를 적용한다면

해당 클래스에서 발생하는 예외에 우선권을 가지고 처리한다.


하지만 스프링에서는 이것보다는 SimpleMappingExceptionResolver를 이용한 입셉션처리를 권장하고 있다.

SimpleMappingExceptionResolver를 상속받아  커스텀 클래스를 만들면

ajax와 페이지 이동 방식등을 구분해서 사용할 수 있는 등 좀 더 디테일하게 예외처리를 할 수 있다.

이부분은 아직 공부가 덜 되서 다음에 쓰도록 하겠습니다.


+ Recent posts