Как вернуть сопоставление исключений по умолчанию, которое было в Spring Boot 1.5?

У меня есть приложение 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.

Итак, что изменилось и как мне вернуть прежнее поведение?

Это со стороны Spring, а не со стороны Джерси. Джерси не выводит это тело ответа. Не имеет ничего общего с сопоставлением исключений Джерси.

Paul Samsotha 24.04.2018 21:13

@PaulSamsotha спасибо, я обновил вопрос.

Czar 24.04.2018 21:37
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
2
275
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Этот ответ об ошибке поступает не из Джерси. Фактически он создается, когда вы включаете модуль spring-boot-starter-web в свой проект. На основе Комментарий Энди Уилкинсона мы можем легко переопределить атрибуты JSON, создав bean-компонент ErrorAttributes. Чтобы добавить исключение, мы можем просто вернуть DefaultErrorAttributes, создав его с помощью флаг конструктора для включения исключения.

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

Я проверил это, и он, как и ожидалось, включает исключение.

Другие вопросы по теме