Configurer un RestTemplate avec RestTemplateBuilder

Configurer un RestTemplate avec RestTemplateBuilder

1. introduction

Dans ce rapide tutoriel, nous allons examinerhow to configure a Spring RestTemplate bean.

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

  • en utilisant leRestTemplateBuilder par défaut

  • en utilisant unRestTemplateCustomizer

  • créer nos propresRestTemplateBuilder

Pour pouvoir tester cela facilement, veuillez suivre le guide surhow to set up a simple Spring Boot application.

2. Configuration utilisant lesRestTemplateBuilder par défaut

Pour configurer unRestTemplate de cette façon, nous avons besoin deinject the default RestTemplateBuilder bean provided by Spring Boot dans nos classes:

private RestTemplate restTemplate;

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

Le sbeanRestTemplate créé avec cette méthode a sesscope limited to the class in which we build it.

3. Configuration utilisant unRestTemplateCustomizer

Avec cette approche, nous pouvonscreate an application-wide, additive customization.

C'est une approche légèrement plus compliquée. Pour cela, nous devonscreate a class that implements RestTemplateCustomizer, able le définir comme un haricot:

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

Le sinterceptorCustomClientHttpRequestInterceptor effectue la journalisation de base de la requête:

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éfinissonsCustomRestTemplateCustomizer  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,every RestTemplate that we’ll use in our application will have the custom interceptor set on it.

4. Configuration en créant nos propresRestTemplateBuilder

C'est l'approche la plus extrême pour personnaliser unRestTemplate. 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());
}

Après cela, nous pouvonsinject the custom builder dans nos classes comme nous le ferions avec unRestTemplateBuilder par défaut et créer unRestTemplate comme d'habitude:

private RestTemplate restTemplate;

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

5. Conclusion

Nous avons vu comment configurer unRestTemplate avec leRestTemplateBuilder par défaut, en construisant nos propresRestTemplateBuilder, ou en utilisant un beanRestTemplateCustomizer.

Comme toujours, la base de code complète pour cet exemple peut être trouvée dans nosGitHub repository.