我有一个spring boot Jersey应用程序,我已经将它从Spring Boot 1.5.4
(平台:Brussels-SR3)升级到Boot 2.0.1
(平台:Cairo-RELEASE),这带来了Jersey版本从2.25.1
到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的异常映射,但我不熟悉代码库,看起来很复杂。我无法找到映射发生的位置。我也没有在文档或发行说明中找到有关更改异常映射的任何提及。
根据以上内容和下面的评论,我认为改变是在Spring方面。
那么,改变了什么,如何恢复旧的行为呢?
答案 0 :(得分:0)
此错误响应不是来自泽西岛。当您将spring-boot-starter-web
模块包含到项目中时,实际上会生成它。基于Andy Wilkinson's comment,我们可以通过创建ErrorAttributes
bean轻松覆盖JSON属性。要添加例外,我们只需返回DefaultErrorAttributes
,使用constructor flag创建该例外以包含例外。
@Bean
public ErrorAttributes errorAttributes() {
return new DefaultErrorAttributes(true);
}
我已经对此进行了测试,它包含了预期的异常。