为什么不使用@ControllerAdvice中的这个通用异常处理程序?

时间:2017-11-03 20:58:46

标签: java spring spring-mvc spring-boot

我想要一个"全能"继承自for i in range(n): x = vector() np.savetxt('t.txt', x, newline=" ") 的任何类型的异常的方法。当我尝试注入多种东西时,它从未被调用过。

这不会被调用:

Exception

如果我更改为此,则会调用它:

@ExceptionHandler(value = Exception.class)
public ResponseEntity<Object> handleException(Exception exception, HttpStatus status, WebRequest request) throws Exception
{
    return null; //Temporary for testing
}

为什么?

注释不应告诉Spring Boot它处理Exception类型的所有内容吗?

全班:

@ExceptionHandler(value = Exception.class)
public ResponseEntity<Object> handleException(Exception exception) throws Exception
{
    return null; //Temporary for testing
}

1 个答案:

答案 0 :(得分:3)

每{{}}} HttpStatus不属于ExceptionHandler方法的允许参数类型:

  

允许使用此注释注释的处理程序方法   拥有非常灵活的签名。他们可能有参数   以下类型,按任意顺序:

     
      
  • 异常参数:声明为一般异常或更具体的异常。这也可以作为映射提示   注释本身不会通过它缩小异常类型   值()。

  •   
  • 请求和/或响应对象(通常来自Servlet API)。您可以选择任何特定的请求/响应类型,例如ServletRequest中   / HttpServletRequest。

  •   
  • 会话对象:通常是HttpSession。此类型的参数将强制存在相应的会话。作为结果,   这样的论证永远不会是空的。请注意,会话访问可能不会   是线程安全的,特别是在Servlet环境中:考虑一下   切换&#34; synchronizeOnSession&#34;标记为&#34; true&#34;如果多个   允许请求同时访问会话。

  •   
  • WebRequest或NativeWebRequest。允许通用请求参数访问以及请求/会话属性访问,无需绑定   本机Servlet API。

  •   
  • 当前请求区域设置的区域设置(由可用的最具体区域设置解析程序确定,即已配置的LocaleResolver   在Servlet环境中。)

  •   
  • 用于访问请求内容的InputStream / Reader。这将是Servlet API公开的原始InputStream / Reader。

  •   
  • OutputStream / Writer用于生成响应的内容。这将是Servlet API公开的原始OutputStream / Writer。

  •   
  • 模型作为从处理程序方法返回模型映射的替代方法。请注意,提供的模型不会预先填充常规模型   模型属性因此总是空的,为方便起见   为特定于异常的视图准备模型。

  •