Выбор ответа Middle Spring MVC и REST обновлено

Единый формат ошибок

Вопрос

Как в Spring 6 вернуть ошибку в стандартном формате application/problem+json?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Вернуть ProblemDetail из @ExceptionHandler в advice. ProblemDetail (Spring 6) реализует стандарт RFC 9457: поля type, title, status, detail, instance и свои расширения.

Варианты ответа

  1. Бросить RuntimeException: Spring сам сформирует problem+json
  2. Вернуть ProblemDetail из @ExceptionHandler в adviceправильный ответ
  3. Вернуть Map с полем "error" и статусом 200
  4. Поставить @ResponseStatus на класс контроллера

Разбор

ProblemDetail (Spring 6) реализует стандарт RFC 9457: поля type, title, status, detail, instance и свои расширения. Его возвращают из обработчиков в @RestControllerAdvice. Стектрейсы клиенту отдавать нельзя. Статус 200 с телом ошибки ломает клиентов и мониторинг. @ResponseStatus задаёт код, но не формат.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.