예외처리
Spring MVC 를 사용할때 Controller쪽에서 Exception을 처리방식
1) @ExceptionHandler 애노테이션을 이용한 처리
2) @ControllerAdvice를 이용한 처리
3) @ResponseStatus를 이용한 HTTP 상태 코드 처리
범용적으로 사용하는 방법은 @ControllerAdvice를 이용한 처리방식으로 공통의 Exception 처리 적용 객체를 사용하는 방법
클래스에 @ControllerAdvice 애노테이션 처리
각 메소드에 @ExceptionHandler를 이용해서 적절한 타입의 Exception을 처리
예시)
@ControllerAdvice public class CommonExceptionAdvice {
@ExceptionHanlder(Exception.class) public String common(Exception e) { return "error_common"; } } |
설명)
@ControllerAdvice 애노테이션을 통해서 이 클래스의 객체가 컨트롤러에서 발생하는 Exception을 전문적으로 처리하는 클래스라는 것을 명시한다.
common() 이라는 메소드를 이용해서 Exception 타입으로 처리되는 모든 예외를 처리하도록 설정하는 것
예시)
@ControllerAdvice public class CommonExceptionAdvice {
@ExceptionHanlder(Exception.class) private ModelAndView errorModelAndView(Exception ex) { ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("/error_common"); modelAndView.addObject("exception", ex); return modelAndView; } } |
설명)
발생한 Exception을 화면으로 전달해주면 개발시 유용하게 사용할수 있다.
@ControllerAdvice 클래스의 메소드는 발생한 Exception 객체의 타입만을 파라미터로 사용할 수 있고, 일반 Controller와 같이 Model을 파라미터로 사용하는 것은 지원하지 않기 때문에 직접 ModelAndView 타입을 사용하는 형태로 작성해야한다.
errorModelAndView() 에서 내부적으로 ModelAndView 의 객체를 생성하고 반환하도록 하고 error_common.jsp에서 발생하는 Exception을 상세하게 볼수 있게 할수 있다.
실 프로젝트 예시)
public class ProjectNameException extends Exception { private String errCode = ""; public ProjectNameException(String msg, String errCode) { super(msg); this.errCode = errCode; } public String getErrCode() { return this.errCode; } } |
@Slf4j @ControllerAdvice public class GlobalExceptionHandler { /** * ProjectNameException 에러를 발생시에 호출된다. * @param e * @throws Exception */ @ExceptionHandler(value = ProjectNameException.class) public String globalProjectNameExceptionHandler(ProjectNameException e) throws Exception { e.printStackTrace(); log.error("!! ProjectNameException !!"); return "error/error"; } /** * Exception 에러를 발생시에 호출된다. * @param e * @throws Exception */ @ExceptionHandler(value = Exception.class) public String globalExceptionHandler(Exception e) throws Exception { log.error("!! Exception !!"); e.printStackTrace(); return "error/error"; } } |
'JAVA > Spring' 카테고리의 다른 글
Spring Transaction (0) | 2017.11.27 |
---|---|
Spring AOP (0) | 2017.11.21 |
RestController (0) | 2017.11.20 |
모델2방식과 스프링 MVC (0) | 2017.11.20 |
스프링 웹프로젝트의 구성 (0) | 2017.11.20 |