如何解决在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方法中添加记录器以解决错误,即您的情况。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。