对于用@ResponseStatus注释的自定义异常,控制台中未打印错误stacktrace

@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);
  }
}


抛出throw new InternalErrorException("error", e)之类的异常,除非删除注释@ResponseStatus,否则切勿在控制台中打印出堆栈跟踪

如何在保留注释@ResponseStatus的同时打印它?

最佳答案

请参见Annotation Type ResponseStatus API doc


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

使用HttpServletResponse.sendError,响应被认为是完整的,不应再写入任何内容。此外,Servlet容器通常会编写HTML错误页面,因此使用了不适合REST API的原因。在这种情况下,最好将ResponseEntity用作返回类型,并完全避免使用@ResponseStatus。


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

也许您想为该异常实现异常处理程序以将其记录下来。

Related question

10-08 12:54