1. Введение
Happy-path REST довольно хорошо понятен, и Spring позволяет легко сделать это на Java.
Но что делать, когда что-то идет не так?
В этом руководстве мы рассмотрим передачу исключения Java как часть ответа JSON с использованием Spring.
Для более широкого обзора ознакомьтесь с нашими сообщениями об обработке ошибок для REST с помощью Spring и создании глобального обработчика исключений Java .
2. Аннотированное решение
Мы собираемся использовать три основные аннотации Spring MVC, чтобы решить эту проблему:
@RestControllerAdvice
, который содержит@ControllerAdvice
для регистрации окружающего класса как нечто, о должен знатькаждый @Controller , и
@ResponseBody
, чтобы указать Spring отображать ответ этого метода в виде JSON.@ExceptionHandler
, чтобы сообщить Spring, какой из наших методов следует вызывать для данного исключения
Вместе они создают bean-компонент Spring, который обрабатывает любые исключения, для которых мы его настраиваем. Вот более подробная информация об использовании @ControllerAdvice
и @ExceptionHandler
в сочетании .
3. Пример
Во-первых, давайте создадим произвольное пользовательское исключение для возврата клиенту:
public class CustomException extends RuntimeException {
// constructors
}
Во-вторых, давайте определим класс для обработки исключения и передадим его клиенту в виде JSON:
@RestControllerAdvice
public class ErrorHandler {
@ExceptionHandler(CustomException.class)
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public CustomException handleCustomException(CustomException ce) {
return ce;
}
}
Обратите внимание, что мы добавили аннотацию @ResponseStatus
. Это будет указывать код состояния для отправки клиенту, в нашем случае это внутренняя ошибка сервера. Кроме того, @ResponseBody
гарантирует, что объект будет отправлен обратно клиенту, сериализованным в JSON. Наконец, ниже приведен фиктивный контроллер, который показывает пример того, как может быть сгенерировано исключение:
@Controller
public class MainController {
@GetMapping("/")
public void index() throws CustomException {
throw new CustomException();
}
}
4. Вывод
В этом посте мы показали, как обрабатывать исключения в Spring. Более того, мы показали, как отправить их обратно клиенту сериализованными в JSON.
Полную реализацию этой статьи можно найти на Github . Это проект на основе Maven, поэтому его легко импортировать и запускать как есть.