Configurer un RestTemplate avec RestTemplateBuilder

1. Introduction

Dans ce rapide tutoriel, nous allons voir comment configurer un bean Spring RestTemplate .

Commençons par discuter des trois principaux types de configuration:

  • en utilisant le RestTemplateBuilder par défaut
  • en utilisant un RestTemplateCustomizer
  • créer notre propre RestTemplateBuilder

Pour pouvoir le tester facilement, veuillez suivre le guide sur la configuration d'une application Spring Boot simple.

2. Configuration à l'aide du RestTemplateBuilder par défaut

Pour configurer un RestTemplate de cette façon, nous devons injecter le bean RestTemplateBuilder par défaut fourni par Spring Boot dans nos classes:

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

Le bean RestTemplate créé avec cette méthode a sa portée limitée à la classe dans laquelle nous le construisons .

3. Configuration à l'aide d'un RestTemplateCustomizer

Avec cette approche, nous pouvons créer une personnalisation additive à l'échelle de l'application.

C'est une approche légèrement plus compliquée. Pour cela, nous devons créer une classe qui implémente RestTemplateCustomizer et la définir comme un bean:

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

L' intercepteur CustomClientHttpRequestInterceptor effectue la journalisation de base de la demande:

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

Maintenant, nous définissons CustomRestTemplateCustomizer comme un bean dans une classe de configuration ou dans notre classe d'application Spring Boot:

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

Avec cette configuration, chaque RestTemplate que nous utiliserons dans notre application aura l'intercepteur personnalisé défini dessus.

4. Configuration en créant notre propre RestTemplateBuilder

Il s'agit de l'approche la plus extrême pour personnaliser un RestTemplate. Il désactive la configuration automatique par défaut de RestTemplateBuilder , nous devons donc le définir nous-mêmes:

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

Après cela, nous pouvons injecter le générateur personnalisé dans nos classes comme nous le ferions avec un RestTemplateBuilder par défaut et créer un RestTemplate comme d'habitude:

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

5. Conclusion

Nous avons vu comment configurer un RestTemplate avec le RestTemplateBuilder par défaut , en créant notre propre RestTemplateBuilder ou en utilisant un bean RestTemplateCustomizer .

Comme toujours, la base de code complète de cet exemple se trouve dans notre référentiel GitHub.