Как SmartMVC обрабатывает запрос
Если понимать порядок выполнения, проще решить, где настраивать нужное поведение и какая часть системы за него отвечает.
Этапы обработки запроса
Типичный запрос проходит через следующие этапы:
- Начало измерения времени: фильтр журналирования сохраняет время начала запроса;
- Поиск обработчика в Spring MVC: определяется метод контроллера;
- Аутентификация и авторизация: защищённый метод API обрабатывается перехватчиком аутентификации SmartMVC;
- Преобразование и проверка параметров: строки с датой и временем преобразуются в Java-типы, а Bean Validation проверяет входные данные;
- Выполнение контроллера: запускается бизнес-код приложения;
- Формирование ответа или ошибки: обычное значение оборачивается в
ApiResponse, а исключение преобразуется в единый ответ об ошибке; - Запись итогов запроса: в качестве категории логгера используется фактический контроллер; в журнал попадают статус и время выполнения.
Успешный путь
@GetMapping("/users/{id}")
public UserView get(@PathVariable Long id) {
return userService.get(id);
}
Контроллер возвращает только бизнес-данные. После выполнения метода механизм ответа оборачивает их в следующую структуру:
{
"success": true,
"code": "OK",
"message": "success",
"data": { "id": "1001", "name": "Ada" },
"timestamp": "1786005000000"
}
Путь с ошибкой
throw new ResourceNotFoundException("User 1001 was not found");
Глобальный обработчик извлекает из исключения HTTP-статус, код и текст ошибки. По умолчанию он вернёт HTTP 404:
{
"success": false,
"code": "RESOURCE_NOT_FOUND",
"message": "User 1001 was not found",
"data": null,
"timestamp": "1786005000000"
}
Что можно заменить или отключить
SmartMVC использует условную автоконфигурацию Spring Boot. Приложение может:
- отключить единые ответы или стандартную обработку исключений;
- предоставить собственный
AuthInterceptor; - предоставить собственный
CurrentAuthили связанные компоненты; - изменить форматы дат, часовой пояс и уровень журнала запросов;
- вернуть
ApiResponseнапрямую, чтобы точно задать ответ конкретного метода API.
Фреймворк предлагает рабочие реализации по умолчанию, но бизнес-правила остаются под контролем приложения. Далее подробно разберём самую заметную возможность — единый формат ответа.