Configurar um RestTemplate com RestTemplateBuilder
1. Introdução
Neste tutorial rápido, vamos dar uma olhada emhow to configure a Spring RestTemplate bean.
Vamos começar discutindo os três principais tipos de configuração:
-
usando o padrãoRestTemplateBuilder
-
usando umRestTemplateCustomizer
-
criando nosso próprioRestTemplateBuilder
Para poder testar isso facilmente, siga o guia emhow to set up a simple Spring Boot application.
2. Configuração usando o padrãoRestTemplateBuilder
Para configurar umRestTemplate desta forma, precisamosinject the default RestTemplateBuilder bean provided by Spring Boot em nossas classes:
private RestTemplate restTemplate;
@Autowired
public HelloController(RestTemplateBuilder builder) {
this.restTemplate = builder.build();
}
ORestTemplate bean criado com este método tem seuscope limited to the class in which we build it.
3. Configuração usando umRestTemplateCustomizer
Com esta abordagem, podemoscreate an application-wide, additive customization.
Essa é uma abordagem um pouco mais complicada. Para isso, precisamoscreate a class that implements RestTemplateCustomizer, and defini-lo como um feijão:
public class CustomRestTemplateCustomizer implements RestTemplateCustomizer {
@Override
public void customize(RestTemplate restTemplate) {
restTemplate.getInterceptors().add(new CustomClientHttpRequestInterceptor());
}
}
O sinterceptorCustomClientHttpRequestInterceptor está fazendo o registro básico da solicitação:
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());
}
}
Agora, definimosCustomRestTemplateCustomizer as um bean em uma classe de configuração ou em nossa classe de aplicativo Spring Boot:
@Bean
public CustomRestTemplateCustomizer customRestTemplateCustomizer() {
return new CustomRestTemplateCustomizer();
}
Com esta configuração,every RestTemplate that we’ll use in our application will have the custom interceptor set on it.
4. Configuração criando nosso próprioRestTemplateBuilder
Esta é a abordagem mais extrema para personalizar umRestTemplate. Itdisables the default auto-configuration of RestTemplateBuilder, so we need to define it ourselves:
@Bean
@DependsOn(value = {"customRestTemplateCustomizer"})
public RestTemplateBuilder restTemplateBuilder() {
return new RestTemplateBuilder(customRestTemplateCustomizer());
}
Depois disso, podemosinject the custom builder em nossas classes como faríamos com umRestTemplateBuilder padrão e criar umRestTemplate como de costume:
private RestTemplate restTemplate;
@Autowired
public HelloController(RestTemplateBuilder builder) {
this.restTemplate = builder.build();
}
5. Conclusão
Vimos como configurar umRestTemplate com oRestTemplateBuilder padrão, construindo nosso próprioRestTemplateBuilder, ou usando um beanRestTemplateCustomizer.
Como sempre, a base de código completa para este exemplo pode ser encontrada em nossoGitHub repository.