Перейти к основному содержимому

Настройте RestTemplate с помощью RestTemplateBuilder

· 2 мин. чтения

1. Введение

В этом кратком руководстве мы рассмотрим, как настроить bean-компонент Spring RestTemplate .

Начнем с обсуждения трех основных типов конфигурации:

  • используя по умолчанию RestTemplateBuilder
  • с помощью RestTemplateCustomizer
  • создание нашего собственного RestTemplateBuilder

Чтобы легко это проверить, следуйте руководству по настройке простого приложения Spring Boot .

2. Конфигурация с использованием RestTemplateBuilder по умолчанию

Чтобы настроить RestTemplate таким образом, нам нужно внедрить bean-компонент RestTemplateBuilder по умолчанию , предоставленный Spring Boot, `` в наши классы:

private RestTemplate restTemplate;

@Autowired
public HelloController(RestTemplateBuilder builder) {
this.restTemplate = builder.build();
}

Область действия bean-компонента RestTemplate, созданного с помощью этого метода, ограничена классом, в котором мы его создаем .

3. Конфигурация с помощью RestTemplateCustomizer

При таком подходе мы можем создать аддитивную настройку всего приложения.

Это немного более сложный подход. Для этого нам нужно создать класс, реализующий RestTemplateCustomizer, и определить его как bean-компонент:

public class CustomRestTemplateCustomizer implements RestTemplateCustomizer {
@Override
public void customize(RestTemplate restTemplate) {
restTemplate.getInterceptors().add(new CustomClientHttpRequestInterceptor());
}
}

Перехватчик CustomClientHttpRequestInterceptor выполняет базовую регистрацию запроса:

public class CustomClientHttpRequestInterceptor implements ClientHttpRequestInterceptor {
private static Logger LOGGER = LoggerFactory
.getLogger(CustomClientHttpRequestInterceptor.class);

@Override
public ClientHttpResponse intercept(
HttpRequest request, byte[] body,
ClientHttpRequestExecution execution) throws IOException {

logRequestDetails(request);
return execution.execute(request, body);
}
private void logRequestDetails(HttpRequest request) {
LOGGER.info("Headers: {}", request.getHeaders());
LOGGER.info("Request Method: {}", request.getMethod());
LOGGER.info("Request URI: {}", request.getURI());
}
}

Теперь мы определяем CustomRestTemplateCustomizer как bean-компонент в классе конфигурации или в нашем классе приложения Spring Boot:

@Bean
public CustomRestTemplateCustomizer customRestTemplateCustomizer() {
return new CustomRestTemplateCustomizer();
}

С этой конфигурацией каждый RestTemplate , который мы будем использовать в нашем приложении, будет иметь установленный на нем пользовательский перехватчик.

4. Конфигурация путем создания нашего собственного RestTemplateBuilder

Это самый экстремальный подход к настройке RestTemplate. Он отключает автоматическую настройку RestTemplateBuilder по умолчанию , поэтому нам нужно определить его самостоятельно:

@Bean
@DependsOn(value = {"customRestTemplateCustomizer"})
public RestTemplateBuilder restTemplateBuilder() {
return new RestTemplateBuilder(customRestTemplateCustomizer());
}

После этого мы можем внедрить пользовательский конструктор в наши классы, как мы сделали бы с RestTemplateBuilder по умолчанию, и создать RestTemplate как обычно:

private RestTemplate restTemplate;

@Autowired
public HelloController(RestTemplateBuilder builder) {
this.restTemplate = builder.build();
}

5. Вывод

Мы увидели, как настроить RestTemplate с помощью RestTemplateBuilder по умолчанию , создать собственный RestTemplateBuilder или использовать bean -компонент RestTemplateCustomizer .

Как всегда, полную кодовую базу для этого примера можно найти в нашем репозитории GitHub .