Автор оригинала: Jacob Stopak.
1. введение
Отдых на счастливом пути довольно хорошо понятен, и весна облегчает это на Java.
Но как быть, когда что-то идет не так?
В этом уроке мы рассмотрим передачу исключения Java как часть ответа JSON с использованием Spring.
Для более широкого взгляда ознакомьтесь с нашими сообщениями об обработке ошибок для REST с Spring и создании глобального обработчика исключений Java .
2. Аннотированное Решение
Мы собираемся использовать три основных аннотации Spring MVC, чтобы решить эту проблему:
- @RestControllerAdvice который содержит @ControllerAdvice для регистрации окружающего класса как чего-то, о чем должен знать каждый @Controller , и @ResponseBody , чтобы сообщить Spring, чтобы он отображал ответ этого метода как JSON
- @ExceptionHandler чтобы сообщить Spring, какой из наших методов должен быть вызван для данного исключения
Вместе они создают компонент 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. Заключение
В этом посте мы показали, как обрабатывать исключения весной. Кроме того, мы показали, как отправить их обратно клиенту, сериализованному в JSON.
Полную реализацию этой статьи можно найти на Github . Это проект на основе Maven, поэтому его должно быть легко импортировать и запускать как есть.