Ответ
RestTemplate — это синхронный клиентский класс в Spring Framework для выполнения HTTP-запросов к RESTful веб-сервисам. Он является частью модуля spring-web.
Основные возможности:
- Поддержка всех основных HTTP-методов (GET, POST, PUT, DELETE, PATCH и др.).
- Автоматическая сериализация/десериализация тел запросов и ответов (JSON, XML) через
HttpMessageConverter. - Перехватчики (Interceptors) для модификации запросов.
- Обработка ошибок через
ResponseErrorHandler.
Пример GET и POST запросов:
// Создание экземпляра (в реальных приложениях лучше инжектировать бин)
RestTemplate restTemplate = new RestTemplate();
// GET-запрос с десериализацией в объект
String url = "https://api.example.com/users/{id}";
User user = restTemplate.getForObject(url, User.class, 1);
// POST-запрос с отправкой объекта
User newUser = new User("John");
User createdUser = restTemplate.postForObject("https://api.example.com/users", newUser, User.class);
Недостатки и статус:
- Синхронный и блокирующий: каждый вызов блокирует поток до получения ответа.
- Устаревший (deprecated): Начиная с Spring 5, RestTemplate помечен как устаревший в пользу WebClient.
Рекомендация: Для новых проектов используйте WebClient из модуля spring-webflux. Он поддерживает реактивную, неблокирующую модель, что лучше для масштабируемости и эффективного использования ресурсов.
// Пример WebClient (реактивный подход)
WebClient.create()
.get()
.uri("https://api.example.com/users/1")
.retrieve()
.bodyToMono(User.class)
.subscribe(user -> System.out.println(user));