Configurar um RestTemplate com RestTemplateBuilder

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.