2013-07-06 38 views
1

我正在使用@ControllerAdvice注释来定义应用程序级别的异常。现在的问题是我有两个@ControllerAdvice类,一个用于REST,一个用于普通的Web应用程序。当我为Exception.class定义@ExceptionHandler时,只考虑第一个。我如何区分两者?或者我怎样才能捕获异常并确定它发生的位置?有没有办法,或者我需要使用控制器特定的异常处理程序?处理Spring MVC中的异常以及Rest API

回答

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节可能是您正在寻找的自定义异常解析器。

+0

谢谢你的答案,但我解决了它的方面,使所有的例外将抛出一个地方。 –

+0

我认为这并不能解释如何在同一个Spring App中为REST API和HTML页面进行异常处理。 -1 –