Как отобразить сообщение об ошибке в Json с помощью ResponseStatusException при загрузке Spring? - PullRequest
2 голосов
/ 29 мая 2020

У меня проблема с отображением сообщения об ошибке в тот момент, когда срабатывает неверный запрос.

@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);
}

Это ответ JSON, когда я запускаю ответ:

{
"timestamp": "2020-05-29T15:40:41.302+00:00",
"status": 400,
"error": "Bad Request",
"message": "",
"path": "/projects/3/bugs/2"  }

Как видите, сообщение не появляется. Если я изменю HttpStatus в коде, он действительно работает, но по какой-то причине сообщение не работает.

Я проверил конструктор класса, и он фактически разрешает только статус и причину.

Я что-то упускаю или это ошибка в классе ResponseStatusException?

1 Ответ

2 голосов
/ 16 июня 2020

Я тоже с этим сталкивался. Это не ошибка, поэтому переход на более раннюю версию - не лучшее решение. Примечания к выпуску Spring Boot 2.3.0 объяснение:

Изменения содержимого страницы ошибок по умолчанию

Сообщение об ошибке и любые ошибки привязки больше не включаются в страница ошибок по умолчанию по умолчанию. Это снижает риск утечки информации клиенту. server.error.include-message и server.error.include-binding-errors можно использовать для управления включением сообщения и ошибками привязки соответственно. Поддерживаемые значения: always, on-param и never.

Так, например, в конфигурации вашего приложения вы можете установить для них отображение message, но не trace вывода (YAML пример):

server:
  error:
    include-message: ALWAYS
    include-stacktrace: NEVER
...