如何在 Spring 启动时使用 ResponseStatusException 将错误消息显示到 Json 中?

Dan*_*tud 4 java spring spring-mvc spring-boot

我在触发错误请求时显示错误消息时遇到问题。

@DeleteMapping("/{projectId}/bugs/{bugId}")
public void deleteBug(@PathVariable (value = "projectId") Long projectId,
                      @PathVariable (value = "bugId") Long bugId){
    if (!projectService.existById(projectId) || !bugService.existById(bugId)) {
        throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "ProjectId " + projectId + " or BugId " + bugId + " not found");
    }
    bugService.deleteBug(bugId);
}
Run Code Online (Sandbox Code Playgroud)

这是我触发响应时的 JSON 响应:

{
"timestamp": "2020-05-29T15:40:41.302+00:00",
"status": 400,
"error": "Bad Request",
"message": "",
"path": "/projects/3/bugs/2"  }
Run Code Online (Sandbox Code Playgroud)

如您所见,该消息没有出现。如果我更改代码中的 HttpStatus,它实际上可以工作,但由于某种原因,该消息不起作用。

我检查了类的构造函数,它实际上只允许状态和原因。

我是遗漏了什么还是 ResponseStatusException 类中的错误?

Tom*_*now 6

我也遇到过这个。这不是错误,因此降级不是最佳解决方案。在春季启动2.3.0版本说明解释:

对默认错误页面内容的更改

默认情况下,错误消息和任何绑定错误不再包含在默认错误页面中。这降低了向客户泄露信息的风险。server.error.include-message并且 server.error.include-binding-errors可以分别用于控制消息的包含和绑定错误。支持的值是alwayson-paramnever

例如,在您的应用程序配置中,您可以将这些设置为显示message但不trace输出(YAML 示例):

server:
  error:
    include-message: ALWAYS
    include-stacktrace: NEVER
Run Code Online (Sandbox Code Playgroud)