Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring boot SpringBoot使用ControllerAdvice中的自定义错误处理所有错误_Spring Boot_Rest_Error Handling_Controller Advice - Fatal编程技术网

Spring boot SpringBoot使用ControllerAdvice中的自定义错误处理所有错误

Spring boot SpringBoot使用ControllerAdvice中的自定义错误处理所有错误,spring-boot,rest,error-handling,controller-advice,Spring Boot,Rest,Error Handling,Controller Advice,我有一个REST api spring启动应用程序,希望处理ControllerAdvice中的任何错误,因为我希望有一个定制的响应格式,而不使用spring默认响应 例如,RequestRejectedException之类的异常不会通过控制器建议进行处理。在Spring上的一个处理程序中,有没有一种优雅的方法来处理任何可能的错误 对于RequestRejectedException,我已经实现了一个GenericFilterBean,并在那里重新格式化了响应,但希望有一种更统一的方法来处理所

我有一个REST api spring启动应用程序,希望处理ControllerAdvice中的任何错误,因为我希望有一个定制的响应格式,而不使用spring默认响应

例如,RequestRejectedException之类的异常不会通过控制器建议进行处理。在Spring上的一个处理程序中,有没有一种优雅的方法来处理任何可能的错误


对于RequestRejectedException,我已经实现了一个GenericFilterBean,并在那里重新格式化了响应,但希望有一种更统一的方法来处理所有错误。

使用ControllerAdvice,类似于:

@ControllerAdvice
class GenericExceptionHandling extends ResponseEntityExceptionHandler {

    @ExceptionHandler(value = RuntimeException.class)
    protected ResponseEntity<Object> handleConflict(
      RuntimeException ex, WebRequest request) {
        String bodyOfResponse = "This should be application specific";
        return handleExceptionInternal(ex, bodyOfResponse, 
          new HttpHeaders(), HttpStatus.CONFLICT, request);
    }

}
@ControllerAdvice
类GenericeExceptionHandling扩展了ResponseEntityExceptionHandler{
@ExceptionHandler(值=RuntimeException.class)
保护响应性手冲突(
运行时异常(例如,WebRequest请求){
String bodyOfResponse=“这应该是特定于应用程序的”;
返回手柄内部(例如,响应主体,
新建HttpHeaders(),HttpStatus.CONFLICT,请求);
}
}
应该是有道理的,但由于spring以不同的方式抛出此异常,因此似乎无法像这样处理它。阅读处理这个问题的方法之一是使用一个最高阶的过滤器,在这个过滤器中捕获这个异常,并将响应转换为您想要的


相关stackoverflow线程:

控制器建议能够处理由控制器方法调用启动的任何流引发的任何异常

这是“SpringMVC”处理异常的通用方法

现在,SpringMVC的基础设施在技术上基于单个servlet(称为DispatcherServlet),它可以通过url、http方法等将控制器方法“分配”给调用

但是,您可以使用Servlet的过滤器,这些过滤器由底层web容器(如tomcat或jetty)直接部署和处理。因此,如果该代码引发了异常,对于spring MVC来说,它有点“看不见”,它甚至不会到达MVC控制器,因此控制器建议无法拦截异常

您尚未指定哪个代码准确地发起了
RequestRejectedException
,但这可能是在spring mvc之外完成的,因此控制器建议不适用