【发布时间】:2017-11-01 00:18:08
【问题描述】:
我在 weblogic 10.3.6 上为 REST api 托管 Spring Boot 应用程序 我想实现这两个功能:
- 每当我的自定义异常发生时,我想发送一个带有消息的 http 响应,例如500 - “由于某些原因无法解析请求...”
- 无论何时抛出任何错误,我都希望获得通常打印到控制台的堆栈跟踪(用于调试目的)
我尝试通过以下方式解决第一部分:
@ControllerAdvice
public class ExceptionHandlerAdvice {
@ExceptionHandler(MyException.class)
public ResponseEntity handleException(MyException e) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(e.getMessage());
}
但是作为响应,我只收到 500 Internal Server Error 没有消息
至于第二部分,我尝试了类似的方法,但也没有错误消息。
我该如何解决这个问题?
编辑: 我能做到的最好的事情是删除 ExceptionHandlerAdvice 并在我的异常类上使用注释,而不是像这样:
@ResponseStatus(value = HttpStatus.INTERNAL_SERVER_ERROR, reason="This is a message I'd like to send")
它可以工作,但我必须从代码中添加一些变量到消息中,而这种方法不允许这样做
编辑2: 这有点奇怪,可能是 weblogic 服务器的行为,但是当我将 httpStatus 设置为 HttpStatus.ACCEPTED 时,我可以看到消息,如果是 HttpStatus.Forbidden 或任何其他 4xx 错误,我只会收到没有消息的错误
【问题讨论】:
-
你好虫族,这里是人类。也许您的服务抛出不受 ExceptionHandlerAdvice 控制的异常,尝试使用 system.out 调试并打印到控制台
-
我故意在一种方法中抛出 MyException: throw new MyException("some message");
-
你好 zerg,尝试在 handleException 方法中抛出异常。参考这里:stackoverflow.com/questions/39517876/…
标签: java spring spring-boot weblogic-10.x