Выбор ответа Middle Spring MVC и REST обновлено
Единый формат ошибок
Вопрос
Как в Spring 6 вернуть ошибку в стандартном формате application/problem+json?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Вернуть ProblemDetail из @ExceptionHandler в advice. ProblemDetail (Spring 6) реализует стандарт RFC 9457: поля type, title, status, detail, instance и свои расширения.
Варианты ответа
- Бросить RuntimeException: Spring сам сформирует problem+json
- Вернуть
ProblemDetailиз@ExceptionHandlerв adviceправильный ответ - Вернуть Map с полем "error" и статусом 200
- Поставить
@ResponseStatusна класс контроллера
Разбор
ProblemDetail (Spring 6) реализует стандарт RFC 9457: поля type, title, status, detail, instance и свои расширения. Его возвращают из обработчиков в @RestControllerAdvice. Стектрейсы клиенту отдавать нельзя. Статус 200 с телом ошибки ломает клиентов и мониторинг. @ResponseStatus задаёт код, но не формат.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.