对于用@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