Konfigurieren Sie eine RestTemplate mit RestTemplateBuilder

Konfigurieren Sie eine RestTemplate mit RestTemplateBuilder

1. Einführung

In diesem kurzen Tutorial werden wir unshow to configure a Spring RestTemplate bean. ansehen

Beginnen wir mit der Erörterung der drei Hauptkonfigurationstypen:

  • mit dem StandardRestTemplateBuilder

  • unter Verwendung einesRestTemplateCustomizer

  • Erstellen unserer eigenenRestTemplateBuilder

Um dies einfach testen zu können, folgen Sie bitte der Anleitung zuhow to set up a simple Spring Boot application.

2. Konfiguration mit dem StandardRestTemplateBuilder

Um einRestTemplate auf diese Weise zu konfigurieren, müssen wirinject the default RestTemplateBuilder bean provided by Spring Boot in unsere Klassen einordnen:

private RestTemplate restTemplate;

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

Die mit dieser Methode erstellteRestTemplate bean hat ihrescope limited to the class in which we build it.

3. Konfiguration mitRestTemplateCustomizer

Mit diesem Ansatz können wircreate an application-wide, additive customization.

Dies ist ein etwas komplizierterer Ansatz. Dazu müssen wircreate a class that implements RestTemplateCustomizer, and als Bohne definieren:

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

DerCustomClientHttpRequestInterceptor -Sinterceptor protokolliert die Anforderung grundlegend:

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

Jetzt definieren wirCustomRestTemplateCustomizer als Bean in einer Konfigurationsklasse oder in unserer Spring Boot-Anwendungsklasse:

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

Bei dieser Konfiguration istevery RestTemplate that we’ll use in our application will have the custom interceptor set on it.

4. Konfiguration durch Erstellen eigenerRestTemplateBuilder

Dies ist der extremste Ansatz zum Anpassen vonRestTemplate. 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());
}

Danach können wirinject the custom builder in unsere Klassen einfügen, wie wir es mit einem Standardwert vonRestTemplateBuilder tun würden, und wie gewohntRestTemplate erstellen:

private RestTemplate restTemplate;

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

5. Fazit

Wir haben gesehen, wie Sie einRestTemplate mit dem StandardRestTemplateBuilder konfigurieren, unsere eigenenRestTemplateBuilder, erstellen oder einRestTemplateCustomizer Bean. verwenden

Wie immer finden Sie die vollständige Codebasis für dieses Beispiel in unserenGitHub repository.