2013-07-06 1 views
1

어플 리케이션 레벨에서 예외 정의를 위해 @ControllerAdvice 주석을 사용하고 있습니다. 이제 문제는 두 개의 @ControllerAdvice 클래스를 가지고 있는데 하나는 REST를위한 클래스이고 다른 하나는 일반 웹 앱을위한 클래스입니다. 모두 Exception.class에 대해 @ExceptionHandler을 정의하면 첫 번째 것만 고려됩니다. 어떻게 둘 다 분리합니까? 아니면 예외를 잡아서 어떻게 발생했는지 결정할 수 있습니까? 방법이 있습니까? 그렇지 않으면 컨트롤러 관련 예외 처리기를 사용해야합니까?나머지 API와 함께 Spring MVC에서 예외 처리하기

답변

0

내 응용 프로그램에 대한 사용자 지정 예외를 만들고 @exception 처리기를 사용하여 각각에 대해 하나의 예외 처리기 메서드를 제공하여이 문제를 해결했습니다.

또한 모든 예외가 사용자 지정 예외로 변환되는지 확인하기 위해 측면을 사용했습니다.

@Aspect 
@Component 
public class ExceptionInterceptor { 

    @AfterThrowing(pointcut = "within(x.y.package..*)", throwing = "t") 
    public void toRuntimeException(Throwable t) 
      throws ApplicationException1, ApplicationException2,ApplicationException3 { 
     if (t instanceof ApplicationException1) { 

      throw (ApplicationException1) t; 
     } else if (t instanceof ApplicationException2) { 

      throw (ApplicationException2) t; 
     } else 
      throw (ApplicationException3) t; 
     } 
} 

컨트롤을 @controlleradvice로 전송합니다.

+0

여기에서하는 일을 조금 더 설명해 주시겠습니까? 이 컨트롤을 ControllerAdvice 클래스 중 하나에 어떻게 전송합니까? –

-1

한 달 정도 남았음을 발견 했으므로 오래된 것일 수 있습니다. 그러나이 기사는 http://www.baeldung.com/2013/01/31/exception-handling-for-rest-with-spring-3-2/을 도울 것입니다.

섹션 3.5는 아마도 사용자 정의 Exception Resolver를 찾고 있습니다.

+0

해답을 주셔서 감사합니다. 그러나 모든 예외가 단일 장소에 던져 질 수 있도록 측면을 사용하여 해결했습니다. –

+0

이 코드는 동일한 Spring App에서 REST API와 HTML 페이지 모두에 예외 처리를 수행하는 방법을 설명하지 않는다고 생각합니다. -1 –