在Spring中扩展ResponseEntityExceptionHandler时,为什么不打印stackTrace?

问题描述

我正在构建一个Spring Boot应用程序。当出现异常时,我试图使用一种体面的方式来处理其余响应。因此,我将ResponseEntityExceptionHandler扩展到名为RestResponseEntityExceptionHandler的类中。 问题是,当引发异常时,控制台中不会打印stackTrace。当我删除RestResponseEntityExceptionHandler类时,将在控制台中再次打印stacktrace!

RestResponseEntityExceptionHandler类的外观如下:

@RestControllerAdvice
public class RestResponseEntityExceptionHandler extends ResponseEntityExceptionHandler {

    @ExceptionHandler(value = { IllegalArgumentException.class,TechnicalException.class})
    protected void handleBadRequest(RuntimeException e,HttpServletResponse response) throws IOException 
    {
        response.sendError(HttpStatus.BAD_REQUEST.value(),e.getMessage());
    }
}

我正在使用logback进行记录。

我发现了一些解决方法,例如添加一个logger.error("Details : ",exception);,它可以正常工作并打印stackTrace,但是我不喜欢使用类似的解决方案,因为它仅适用于该类处理的异常。 。其他例外不会打印stackTrace。

为什么不打印stackTrace的任何解释? 谢谢。

解决方法

它不是“已打印”的,因为您已经在RestResponseEntityExceptionHandler中处理该异常。

,

因为您正在处理异常。如果要与处理一起打印,请将logger放在ExceptionHandler方法中。

,

Staketrace不会被打印,因为您正在通过RestControllerAdvice处理RestResponseEntityExceptionHandler中的ResponseEntityExceptionHandler并仅在响应中传递错误消息。您要专门打印它,然后在handleBadRequest方法中添加记录器以解决错误,即您的情况。