英文:
Why is the stackTrace not printed when extending the ResponseEntityExceptionHandler in Spring?
问题
我正在构建一个Spring Boot应用程序。我试图使用一种合理的方式来处理异常引发时的REST响应。所以我扩展了ResponseEntityExceptionHandler
为一个名为RestResponseEntityExceptionHandler
的类。
问题是,当抛出异常时,堆栈跟踪未在控制台中打印。当我删除RestResponseEntityExceptionHandler
类时,堆栈跟踪再次打印在控制台上!
以下是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);
,它可以正常工作并打印堆栈跟踪,但我更喜欢不使用这样的解决方案,因为它仅适用于该类处理的异常...其他异常不会打印堆栈跟踪。
为什么堆栈跟踪没有打印的任何解释?先感谢您。
英文:
I'm building a spring boot application. I'm trying to use a decent way of handling rest responses when an exceptions is raised. So I extended the ResponseEntityExceptionHandler
into a class named RestResponseEntityExceptionHandler
.
The problem is that when an exception is thrown, the stackTrace is not printed in the console. when I delete this RestResponseEntityExceptionHandler
class, the stacktrace is printed again in the console !
Here is what the RestResponseEntityExceptionHandler
class looks like :
@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());
}
}
I am using logback for logging.
I found some tricks to deal with that, like adding a logger.error("Details : ", exception);
which works fine and prints the stackTrace but I prefer not to use a solution like that since it works only for the exceptions handeled by that class... the other exceptions wont print the stackTrace.
Any explanations why the stackTrace is not printed ?
Thanx in advance.
答案1
得分: 1
因为您正在处理异常。如果您想要在处理过程中打印信息,请将logger
放在ExceptionHandler
方法内部。
英文:
Because You are handling Exception. If you want to print along with the handling, put logger
inside ExceptionHandler
methods.
答案2
得分: 0
因为您已经在RestResponseEntityExceptionHandler中处理了异常,所以不会“打印”该异常。
英文:
It is not "printed" because you are already handling the exception in RestResponseEntityExceptionHandler.
答案3
得分: 0
由于您在RestResponseEntityExceptionHandler中通过RestControllerAdvice处理ResponseEntityExceptionHandler,并且仅在响应中传递错误消息,因此堆栈跟踪未被打印出来。如果您想要特别打印它,那么请在handleBadRequest方法中为错误(即e)添加一个记录器。
英文:
Staketrace is not getting printed because you are handling the ResponseEntityExceptionHandler in the RestResponseEntityExceptionHandler by RestControllerAdvice and passing only the error message in response. It you want to print it specially then add a logger in your handleBadRequest method for the error i.e. e in your case.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论