본문 바로가기

JAVA/Spring

예외처리 기본

반응형

예외처리

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