如何恢复Spring Boot 1.5中的默认异常映射?

时间:2018-04-24 17:26:58

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

我有一个spring boot Jersey应用程序,我已经将它从Spring Boot 1.5.4(平台:Brussels-SR3)升级到Boot 2.0.1(平台:Cairo-RELEASE),这带来了Jersey版本从2.25.12.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的异常映射,但我不熟悉代码库,看起来很复杂。我无法找到映射发生的位置。我也没有在文档或发行说明中找到有关更改异常映射的任何提及。

根据以上内容和下面的评论,我认为改变是在Spring方面。

那么,改变了什么,如何恢复旧的行为呢?

1 个答案:

答案 0 :(得分:0)

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

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

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