有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我有一个spring boot Jersey应用程序,我已经将它从spring boot1.5.4(平台:布鲁塞尔-SR3)升级到boot2.0.1(平台:开罗发行版),这将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"
}

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

我曾尝试调试jersey的异常映射,但我不熟悉代码库,而且它似乎相当复杂。我找不到映射发生在哪里。我在文档或发行说明中也找不到任何关于更改异常映射的内容

基于以上和下面的评论,我认为变化是在Spring方面

那么,是什么改变了,我该如何恢复旧的行为


共 (1) 个答案

  1. # 1 楼答案

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

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

    我已经测试过了,它包括了预期的异常