Spring Boot 错误控制器检索原始请求

dib*_*ger 6 java spring spring-boot

默认情况下,Spring Boot 映射/errorBasicErrorController. 我想记录异常以及导致异常的请求。如何获取原始请求BasicErrorController或新的CustomErrorController. 似乎Spring Boot会/error在抛出异常并且原始请求信息消失或无法将错误与原始请求映射时发出新请求。 在此处输入图片说明

mea*_*lai 11

通过以下方式获取:

String url = (String) request.getAttribute(RequestDispatcher.ERROR_REQUEST_URI);
Run Code Online (Sandbox Code Playgroud)


dib*_*ger 5

为了避免任何误导性信息,Spring Boot不会向端点发出新请求/error。相反,它将异常包装在原始请求中并将其转发到/error端点。BasicErrorHandler如果您不提供自定义错误处理程序,则该请求将被处理。

在这种情况下,如果您使用interceptor,拦截器将被调用两次- 一次针对原始请求,另一次针对转发的请求。

要检索原始请求信息,请查看转发的请求的属性。基本上,您可以从这些属性中获取错误消息javax.servlet.error.message, javax.servlet.error.status_code, org.springframework.web.servlet.DispatcherServlet.EXCEPTION

这些是与 Spring Boot 中的错误处理相关的一些资源:


rav*_*kam 0

如果您使用控制器建议来处理异常,那么带有 @ExceptionHandler 的方法可以将请求作为参数注入,如下所示:

@ControllerAdvice
public class YourExceptionHandler
{
    @ExceptionHandler
    public ResponseEntity handleExceptions(HttpServletRequest request, Exception exception)
    {
        // use request to populate error object with details like requestId
        LOGGER.debug(String.valueOf(request));
        LOGGER.error(exception.getMessage(), exception);
     }
}
Run Code Online (Sandbox Code Playgroud)