首页 > 解决方案 > 为什么在Spring中扩展ResponseEntityExceptionHandler时不打印stackTrace?

问题描述

我正在构建一个弹簧启动应用程序。当引发异常时,我正在尝试使用一种体面的方式来处理休息响应。所以我将其扩展ResponseEntityExceptionHandler为一个名为RestResponseEntityExceptionHandler. 问题是当抛出异常时,stackTrace 不会打印在控制台中。当我删除此类时RestResponseEntityExceptionHandler,堆栈跟踪会再次在控制台中打印!

这是这个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 的任何解释?提前谢谢。

标签: javaspringrestexceptionlogback

解决方案


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


推荐阅读