Что такое RestTemplate в Spring Framework?

«Что такое RestTemplate в Spring Framework?» — вопрос из категории Spring, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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));