提问者:小点点

Spring Boot 2.3中没有打印自定义异常的堆栈跟踪


错误堆栈跟踪不会在控制台中打印,用于使用@响应状态注释的自定义异常

@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public class InternalErrorException extends RuntimeException {

  public InternalErrorException(String message) {
    super(message);
  }

  public InternalErrorException(String message, Throwable throwable) {
    super(message, throwable);
  }
}

抛出异常,如抛出新的InternalErrorException("error", e),永远不会在控制台中打印堆栈跟踪,除非我删除注释@响应状态

如何在保留注释@响应状态的同时打印它?


共1个答案

匿名用户

请参见注释类型响应状态API文档。

警告:在异常类上使用此注释时,或设置此注释的原因属性时,将使用HttpServletResponse. sendError方法。

使用HttpServletResponse. sendError,响应被认为是完整的,不应再写入任何响应。此外,Servlet容器通常会编写一个超文本标记语言错误页面,因此使用不适合REST API的原因。对于这种情况,最好使用响应实体作为返回类型,并完全避免使用@响应状态。

HttpServletResponse. sendError不会抛出您的错误,我想它永远不会因此而被记录。

也许您想为该异常实现异常处理程序以记录它。

相关问题