问题描述
我正在构建一个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方法中添加记录器以解决错误,即您的情况。