ControllerAdvice 사용
- 작성자 :
- 이*재
- 작성일 :
- 2016-08-09 10:55:03
- 조회수 :
- 1,348
- 구분 :
- 개발환경
- 진행상태 :
- 완료
Q
기존의 예외 처리를 After throwing advice로 exception을 잡아서 처리 하고 있습니다.
기존 설정
<aop:config>
<aop:pointcut id="sdf.serviceMethod"
expression="execution(* com.aaa..*Service.*(..))
or execution(* egovframework.com..*Impl.*(..))" />
<aop:aspect ref="sdfExceptionTransfer">
<aop:after-throwing throwing="exception" pointcut-ref="sdf.serviceMethod" method="transfer" />
</aop:aspect>
</aop:config>
이렇게 해서 로그도 보고 기록하고 사용하고 있습니다.
신규 프로젝트 환경 구성 중 Controller레벨에서 예외처리를 보완하려고 ControllerAdvice Annotation을 이용한 설정을 테스트 하던중에 궁금한 점이 생겨서 문의 드립니다.(스프링 3.2 사용)
아래와 같이 설정 하였습니다.
<mvc:annotation-driven/>
<context:component-scan base-package="com.aaa" use-default-filters="false">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" />
<context:include-filter type="annotation" expression="org.springframework.web.bind.annotation.ControllerAdvice" />
</context:component-scan>
문제는 기존에 After throwing으로 exception잡던 부분이 호출이 되지 않더라구요.
생각해보면 service에서 던질때 둘중 하나가 먼저 잡으면 나머지는 작동 안되는게 맞는거 같기는한데..
질문 1. ControllerAdvice어노테이션을 사용하게 되면 service레벨에서 에러를 던질때 ControllerAdvice로 지정한 빈으로 바로 처리가 넘어가게 되는건가요?(After throwing으로 exception이 안 잡히는 지)
질문 2. After throwing으로 exception을 잡아서 에러 로그 기록하고 ControllerAdvice로 사용자에게 에러 뷰처리를 하는 방식으로 분리 해서 구성하고 싶은데 가능한가요?
기존 설정
<aop:config>
<aop:pointcut id="sdf.serviceMethod"
expression="execution(* com.aaa..*Service.*(..))
or execution(* egovframework.com..*Impl.*(..))" />
<aop:aspect ref="sdfExceptionTransfer">
<aop:after-throwing throwing="exception" pointcut-ref="sdf.serviceMethod" method="transfer" />
</aop:aspect>
</aop:config>
이렇게 해서 로그도 보고 기록하고 사용하고 있습니다.
신규 프로젝트 환경 구성 중 Controller레벨에서 예외처리를 보완하려고 ControllerAdvice Annotation을 이용한 설정을 테스트 하던중에 궁금한 점이 생겨서 문의 드립니다.(스프링 3.2 사용)
아래와 같이 설정 하였습니다.
<mvc:annotation-driven/>
<context:component-scan base-package="com.aaa" use-default-filters="false">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" />
<context:include-filter type="annotation" expression="org.springframework.web.bind.annotation.ControllerAdvice" />
</context:component-scan>
문제는 기존에 After throwing으로 exception잡던 부분이 호출이 되지 않더라구요.
생각해보면 service에서 던질때 둘중 하나가 먼저 잡으면 나머지는 작동 안되는게 맞는거 같기는한데..
질문 1. ControllerAdvice어노테이션을 사용하게 되면 service레벨에서 에러를 던질때 ControllerAdvice로 지정한 빈으로 바로 처리가 넘어가게 되는건가요?(After throwing으로 exception이 안 잡히는 지)
질문 2. After throwing으로 exception을 잡아서 에러 로그 기록하고 ControllerAdvice로 사용자에게 에러 뷰처리를 하는 방식으로 분리 해서 구성하고 싶은데 가능한가요?
A
질문 1. ControllerAdvice어노테이션을 사용하게 되면 service레벨에서 에러를 던질때 ControllerAdvice로 지정한 빈으로 바로 처리가 넘어가게 되는건가요?(After throwing으로 exception이 안 잡히는 지)
> 잡히는걸로 알고 있습니다. 하단 위키를 참조 하세요.
http://www.egovframe.go.kr/wiki/doku.php?id=egovframework:rte:fdl:aop:egovrteaopguide
질문 2. After throwing으로 exception을 잡아서 에러 로그 기록하고 ControllerAdvice로 사용자에게 에러 뷰처리를 하는 방식으로 분리 해서 구성하고 싶은데 가능한가요?
> ControllerAdvice After throwing의 기능을 이용하시면 사용자에게 에러 뷰처리에 적합하지 않을꺼 같습니다.
> 별도로 에러를 처리하는 방식으로 가시면될꺼 같습니다.
SimpleMappingExceptionResolver, User defined Exception 이런 방식처럼 별도로 처리 하시면 됩니다.
감사합니다.
> 잡히는걸로 알고 있습니다. 하단 위키를 참조 하세요.
http://www.egovframe.go.kr/wiki/doku.php?id=egovframework:rte:fdl:aop:egovrteaopguide
질문 2. After throwing으로 exception을 잡아서 에러 로그 기록하고 ControllerAdvice로 사용자에게 에러 뷰처리를 하는 방식으로 분리 해서 구성하고 싶은데 가능한가요?
> ControllerAdvice After throwing의 기능을 이용하시면 사용자에게 에러 뷰처리에 적합하지 않을꺼 같습니다.
> 별도로 에러를 처리하는 방식으로 가시면될꺼 같습니다.
SimpleMappingExceptionResolver, User defined Exception 이런 방식처럼 별도로 처리 하시면 됩니다.
감사합니다.