Рубрики
Без рубрики

Использование весеннего @ResponseStatus для настройки кода статуса HTTP

Взгляните на аннотацию @ResponseStatus и как использовать ее для настройки кода статуса ответа.

Автор оригинала: Attila Fejér.

1. Введение

Весной mVC, у нас есть много способов установить код статуса ответа http .

В этом коротком учебнике мы увидим самый простой способ: использование @ResponseStatus аннотация.

2. О методах контроллера

Когда конечная точка возвращается успешно, Spring предоставляет ответ HTTP 200 (OK).

Если мы хотим указать статус ответа метода контроллера , мы можем отметить этот метод @ResponseStatus. Он имеет два взаимозаменяемых аргумента в пользу желаемого статуса ответа: код, и ценность. Например, мы можем указывают на то, что сервер отказывается варить кофе, потому что это чайник :

@ResponseStatus(HttpStatus.I_AM_A_TEAPOT)
void teaPot() {}

Когда мы хотим, чтобы сигнал об ошибке, мы можем предоставить сообщение об ошибке через причина аргумент:

@ResponseStatus(HttpStatus.BAD_REQUEST, reason = "Some parameters are invalid")
void onIllegalArgumentException(IllegalArgumentException exception) {}

Обратите внимание, что, когда мы устанавливаем причина , Весенние звонки HttpServletResponse.sendError () . Таким образом, он будет посылать Страница ошибок HTML для клиента, что делает ее плохо пригодной для конечных точек REST .

Также обратите внимание, что Весна использует только @ResponseStatus , когда отмеченный метод успешно завершает (не бросая Исключение ).

3. С обработчиками ошибок

У нас есть три способа @ResponseStatus для преобразования Исключение статус ответа HTTP:

  • с помощью @ExceptionHandler
  • с помощью @ControllerAdvice
  • маркировка Исключение класс

Для использования первых двух решений мы должны определить метод обработчика ошибок. Вы можете прочитать больше об этой теме в этой статье .

Мы можем использовать @ResponseStatus с этими методами обработчика ошибок так же, как мы делали с регулярными методами MVC в предыдущем разделе.

Когда нам не нужны динамические ответы на ошибки, самым простым решением является третье: маркировка класса исключения @ResponseStatus:

@ResponseStatus(code = HttpStatus.BAD_REQUEST)
class CustomException extends RuntimeException {}

Когда Весна ловит эту Исключение , он использует настройки, которые мы предоставили в @ResponseStatus .

Обратите внимание, что, когда мы отмечаем Исключение класс с @ResponseStatus , Весна всегда зовет HttpServletResponse.sendError () , устанавливаем ли мы причина или нет.

Также обратите внимание, что Spring использует ту же конфигурацию для подклассов, если мы не помечим их @ResponseStatus тоже.

4. Заключение

В этой статье мы увидели, как мы можем использовать @ResponseStatus установить код ответа HTTP в различных сценариях, включая обработку ошибок.

Как обычно, примеры доступны более на GitHub .