Обработка исключений REST API при загрузке Spring
Что такое исключение?
Исключение - это нежелательный или непредвиденный случай, который происходит во время выполнения программы, то есть во время выполнения, что приводит к остановке программы.
Как обрабатывать исключения в Spring Boot?
В Spring Boot есть много способов обработать исключение, но мы сосредоточимся на «Как обрабатывать исключение глобально для каждого API?».
Мы будем использовать @ ControllerAdvice и @ExceptionHandler для обработки всех исключений в одном месте, поэтому, если возникнет исключение, оно пройдет через наши обработанные методы.
@ControllerAdvice
@ControllerAdvice
is a specialization of the@Component
annotation which allows to handle exceptions across the whole application in one global handling component. It can be viewed as an interceptor of exceptions thrown by methods annotated with@RequestMapping
and similar.
@ExceptionHandler
Annotation for handling exceptions in specific handler classes and/or handler methods.
Чтобы обработать исключение, нам нужно создать универсальный класс для всех ответов на исключение.
errorMessage: The message that we want to display to the end user. errorCode: Http Status Code timestamp: Time when an exception is thrown
Теперь для каждого типа исключения нам нужно создать отдельные классы.
Общие варианты использования:
- Несанкционированное исключение 401
- Resource Not Found Exception 404
- Ресурс уже существует / конфликт 409
- Неверный запрос / особое исключение 400
Создайте классы
- UnauthorizedException.java
/** * @author anuragdhunna */ public class UnauthorizedException extends RuntimeException { public UnauthorizedException(String message) { super(message); } }
- ResourceNotFoundException.java
/** * @author anuragdhunna */ public class ResourceNotFoundException extends RuntimeException { public ResourceNotFoundException(String message) { super(message); } }
- ResourceAlreadyExists.java
/** * @author anuragdhunna */ public class ResourceAlreadyExists extends RuntimeException { public ResourceAlreadyExists(String message) { super(message); } }
- CustomException.java
/** * @author anuragdhunna */ public class CustomException extends RuntimeException { public CustomException(String message) { super(message); } }
Теперь давайте создадим глобальный класс обработки исключений с помощью @ControllerAdvice.
Теперь все исключения обрабатываются через GlobalExceptionHandle r.
Давайте проверим это:
Создайте метод в любом контроллере по вашему выбору:
@RequestMapping(value = "/testExceptionHandling", method = RequestMethod.GET) public String testExceptionHandling(@RequestParam int code) { switch (code) { case 401: throw new UnauthorizedException("You are not authorized"); case 404: throw new ResourceNotFoundException("Requested resource is not found."); case 400: throw new CustomException("Please provide resource id."); case 409: throw new ResourceAlreadyExists("Resource already exists in DB."); default: return "Yeah...No Exception."; } }
API:
http://localhost:5000/api/testExceptionHandling?code=401
Ответ:
{ "errorMessage": "You are not authorized", "errorCode": "UNAUTHORIZED", "timestamp": "14-06-2020 04:51:13" }
Прежде чем ты уйдешь…
Если вам понравилась ❤ эта статья, нажмите 👏 хлоп.
Если вы знаете кого-то, кто может извлекать выгоду, пожалуйста, поделитесь. Я буду искать ваше мнение и предложения в комментариях, отзывы всегда приветствуются.