«1. Введение
В этом кратком руководстве мы рассмотрим, как настроить bean-компонент Spring RestTemplate.
Давайте начнем с обсуждения трех основных типов конфигурации:
-
использование RestTemplateBuilder по умолчанию использование RestTemplateCustomizer создание собственного RestTemplateBuilder
Чтобы иметь возможность легко протестировать это, следуйте руководству по настройке простого Spring Загрузочное приложение.
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.