У меня есть приложение Spring Boot Jersey, я обновил его с Spring Boot 1.5.4 (платформа: Брюссель-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.
Итак, что изменилось и как мне вернуть прежнее поведение?
@PaulSamsotha спасибо, я обновил вопрос.




Этот ответ об ошибке поступает не из Джерси. Фактически он создается, когда вы включаете модуль spring-boot-starter-web в свой проект. На основе Комментарий Энди Уилкинсона мы можем легко переопределить атрибуты JSON, создав bean-компонент ErrorAttributes. Чтобы добавить исключение, мы можем просто вернуть DefaultErrorAttributes, создав его с помощью флаг конструктора для включения исключения.
@Bean
public ErrorAttributes errorAttributes() {
return new DefaultErrorAttributes(true);
}
Я проверил это, и он, как и ожидалось, включает исключение.
Это со стороны Spring, а не со стороны Джерси. Джерси не выводит это тело ответа. Не имеет ничего общего с сопоставлением исключений Джерси.