Конфигурирайте RestTemplate с RestTemplateBuilder

1. Въведение

В този бърз урок ще разгледаме как да конфигурираме боб Spring RestTemplate .

Нека започнем с обсъждане на трите основни типа конфигурация:

  • използвайки RestTemplateBuilder по подразбиране
  • с помощта на RestTemplateCustomizer
  • създаване на наш собствен RestTemplateBuilder

За да можете лесно да тествате това, моля, следвайте ръководството за това как да настроите просто приложение Spring Boot.

2. Конфигуриране с помощта на RestTemplateBuilder по подразбиране

За да конфигурираме RestTemplate по този начин, трябва да инжектираме боб RestTemplateBuilder по подразбиране, предоставен от Spring Boot в нашите класове:

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

В RestTemplate боб, създадена с този метод е неговата обхват се ограничава до класа, в който ние го изгради .

3. Конфигуриране с помощта на RestTemplateCustomizer

С този подход можем да създадем адитивно персонализиране за цялото приложение.

Това е малко по-сложен подход. За това трябва да създадем клас, който реализира RestTemplateCustomizer, и да го дефинираме като боб:

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

В CustomClientHttpRequestInterceptor прехващача прави основен сеч на искането:

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

Сега дефинираме CustomRestTemplateCustomizer като боб в клас на конфигурация или в нашия клас на приложение Spring Boot:

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

С тази конфигурация всеки RestTemplate , който ще използваме в нашето приложение, ще има персонализиран прехващач.

4. Конфигуриране чрез създаване на наш собствен RestTemplateBuilder

Това е най-екстремният подход за персонализиране на RestTemplate. Тя забранява по подразбиране автоматично конфигурацията на RestTemplateBuilder , така че ние трябва да го определят себе си:

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

След това можем да инжектираме персонализирания конструктор в нашите класове, както бихме направили с RestTemplateBuilder по подразбиране и да създадем RestTemplate както обикновено:

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

5. Заключение

Виждали сме как се настройва RestTemplate с по подразбиране RestTemplateBuilder , изграждане на нашата собствена RestTemplateBuilder, или с помощта на RestTemplateCustomizer боб .

Както винаги, пълната кодова база за този пример може да бъде намерена в нашето хранилище GitHub.