Spring Boot—12、 调用REST服务

代码地址:https://github.com/huiyiwu/spring-boot-simple/spring-boot-rest

如果需要从应用程序调用远程REST服务,可以使用Spring Framework的RestTemplate类和Spring WebFlux的WebClient类进行远程调用,RestTemplate为每个事件(HTTP 请求)创建一个新的线程 ,而WebClient 将为每个事件创建类似于“任务”的东西,幕后,Reactive 框架将对这些 “任务” 进行排队,并仅在适当的响应可用时执行它们。

1. RestTempalte

1.1. 使用

Spring Boot不提供任何单个自动配置RestTemplate bean,所以在使用前需要自定义RestTemplate Bean,或者使用RestTemplateBuilder构建:
添加配置:

/**
 * Author: Huchx
 * Date: 2021/1/22 15:25
 */
@Configuration
public class RestTemplateConfig {

    @Bean
    public RestTemplate restTemplate(ClientHttpRequestFactory factory){
        return new RestTemplate(factory);
    }
    @Bean
    public  ClientHttpRequestFactory clientHttpRequestFactory(){
        SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
        factory.setReadTimeout(5000);
        factory.setConnectTimeout(15000);
        return factory;
    }
}

使用RestTemplateBuilder构建:

    private final  RestTemplate restTemplate;
    public AddressService(RestTemplateBuilder restTemplateBuilder) {
        this.restTemplate = restTemplateBuilder.build();
    }

1.2. 自定义

使用RestTemplateCustomizer自定义RestTemplate,添加拦截器:

/**
 * Author: Huchx
 * Date: 2021/1/22 16:27
 */
@Component
public class MyRestTemplateCustomizer implements RestTemplateCustomizer {
    @Override
    public void customize(RestTemplate restTemplate) {
        restTemplate.getInterceptors().add(new CustomizerIntercerptor());
    }
}

2. WebClient

2.1. 使用

  • 添加依赖:
   <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-webflux</artifactId>
        </dependency>
  • 使用
  private final WebClient webClient;
  public AddressService(WebClient.Builder builder) {
       this.webClient = builder.baseUrl(url).build();
   }
 public List<AddressInfo> getByClient() {
      Map<String,Object> addressInfos = webClient.get().retrieve().bodyToMono(Map.class).block();
       return addressInfos!=null? (List<AddressInfo>) addressInfos.get("rows") :null;
   }

2.2. Runtime

  • spring-boot-starter-webflux默认依赖于io.projectreactor.netty:reactor-netty,其提供了服务器和客户端实现。
  • 可以通过添加io.projectreactor.netty:reactor-netty将Jetty用作反应式服务器。
  • 可以通过提供自定义ReactorResourceFactoryJettyResourceFactory bean覆盖Jetty和Reactor Netty的资源配置
  • 可以自定义ClientHttpConnector bean完全控制客户端配置

2.3. 自定义

使用WebClientCustomizer实现WebClient自定义:

/**
 * Author: Huchx
 * Date: 2021/1/22 16:27
 */
@Component
public class MyRestTemplateCustomizer implements RestTemplateCustomizer {
    @Override
    public void customize(RestTemplate restTemplate) {
        restTemplate.getInterceptors().add(new CustomizerIntercerptor());
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值