Configurare un RestTemplate con RestTemplateBuilder

1. Introduzione

In questo breve tutorial, vedremo come configurare un bean Spring RestTemplate .

Iniziamo discutendo i tre principali tipi di configurazione:

  • utilizzando il RestTemplateBuilder predefinito
  • utilizzando un RestTemplateCustomizer
  • creando il nostro RestTemplateBuilder

Per poterlo testare facilmente, segui la guida su come configurare una semplice applicazione Spring Boot.

2. Configurazione utilizzando il RestTemplateBuilder predefinito

Per configurare un RestTemplate in questo modo, dobbiamo iniettare il bean RestTemplateBuilder predefinito fornito da Spring Boot nelle nostre classi:

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

Il bean RestTemplate creato con questo metodo ha il suo ambito limitato alla classe in cui lo creiamo .

3. Configurazione utilizzando un RestTemplateCustomizer

Con questo approccio, possiamo creare una personalizzazione additiva a livello di applicazione.

Questo è un approccio leggermente più complicato. Per questo dobbiamo creare una classe che implementi RestTemplateCustomizer e definirla come un bean:

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

L' intercettore CustomClientHttpRequestInterceptor sta eseguendo la registrazione di base della richiesta:

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()); } }

Ora definiamo CustomRestTemplateCustomizer come un bean in una classe di configurazione o nella nostra classe dell'applicazione Spring Boot:

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

Con questa configurazione, ogni RestTemplate che useremo nella nostra applicazione avrà l'interceptor personalizzato impostato su di esso.

4. Configurazione creando il nostro RestTemplateBuilder

Questo è l'approccio più estremo alla personalizzazione di un RestTemplate. Si disabilita l'auto-configurazione predefinita di RestTemplateBuilder , quindi abbiamo bisogno di definire noi stessi:

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

Dopodiché, possiamo inserire il builder personalizzato nelle nostre classi come faremmo con un RestTemplateBuilder predefinito e creare un RestTemplate come al solito:

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

5. conclusione

Abbiamo visto come configurare un RestTemplate con il RestTemplateBuilder predefinito , costruendo il nostro RestTemplateBuilder o usando un bean RestTemplateCustomizer .

Come sempre, la base di codice completa per questo esempio può essere trovata nel nostro repository GitHub.