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 .