【问题标题】:How to bring back default exception mapping that was in Spring Boot 1.5?如何恢复 Spring Boot 1.5 中的默认异常映射?
【发布时间】:2018-04-24 17:26:58
【问题描述】:

我有一个 Spring Boot Jersey 应用程序,我已经将它从 Spring Boot 1.5.4(平台:Brussels-SR3)升级到 Boot 2.0.1(平台:Cairo-RELEASE),它带来了来自 2.25.1 的 Jersey 版本到2.26

在升级之前,当应用程序抛出未处理的错误时,应用程序会返回如下响应:

{
    "timestamp": 1524060527236, "status": 500, "error": "Internal Server Error",
    "exception": "java.lang.IllegalStateException", "message": "<example message>",
    "path": "/ws/api/example/endpoint"
}

升级后同样的执行返回:

{
    "timestamp": "2018-04-24T17:00:06.151+0000", "status": 500, "error": "Internal Server Error",
    "message": "<example message>", "path": "/ws/api/example/endpoint"
}

我可以处理不同的时间戳格式,但是丢失异常类是个问题。

我尝试调试 jersey 的异常映射,但我对代码库并不熟悉,而且看起来相当复杂。我找不到映射发生在哪里。我在文档或发行说明中也找不到有关更改异常映射的任何提及。

基于上面和下面的 cmets,我想变化是在 Spring 方面。

那么,发生了什么变化以及如何恢复旧的行为?

【问题讨论】:

  • 这是来自 Spring 方面而不是 Jersey。泽西岛不输出该响应正文。与 Jersey 异常映射无关。
  • @PaulSamsotha 谢谢,我已经更新了问题。

标签: java spring spring-boot exception-handling jersey


【解决方案1】:

此错误响应并非来自泽西岛。它实际上是在您将spring-boot-starter-web 模块包含到您的项目中时生成的。基于Andy Wilkinson's comment,我们可以通过创建ErrorAttributes bean 轻松覆盖JSON 属性。要添加异常,我们可以只返回一个DefaultErrorAttributes,使用constructor flag 创建它以包含异常。

@Bean
public ErrorAttributes errorAttributes() {
    return new DefaultErrorAttributes(true);
}

我已经对此进行了测试,它包含预期的异常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-03
    • 1970-01-01
    • 2018-02-26
    • 2021-05-06
    • 2018-03-03
    • 2020-06-23
    • 2018-11-11
    • 1970-01-01
    相关资源
    最近更新 更多