Автор оригинала: 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 .