SpringBoot项目调用外部接口的两种方式:webclient 、hutool

1.WebClient

1.1所需依赖

		
        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-webfluxartifactId>
        dependency>
        <dependency>
            <groupId>io.projectreactor.nettygroupId>
            <artifactId>reactor-nettyartifactId>
        dependency>

        <dependency>
            <groupId>org.projectreactorgroupId>
            <artifactId>reactor-springartifactId>
            <version>1.0.1.RELEASEversion>
        dependency>
        
    或者
    <dependency>
   		<groupId>org.springframework.bootgroupId>
   		<artifactId>spring-boot-starter-webfluxartifactId>
	dependency>

1.2 接口调用举例
1.2.1 post请求-body传参

String BASE_URL = 接口地址;

WebClient.create(BASE_URL)
    //调用方式 post
    .post().uri(具体接口)
    //传递参数
    .body(BodyInserters.fromObject(value))
    //设置header 可选
    .header(头部需要的信息)
    //调用
    .retrieve()
    //返参类型Mono / Flux  
    //使用Mono和Flux接收返回结果,一个Mono对象包含0个或1个元素,而一个Flux对象包含1个或多个元素
    .bodyToFlux(Map.class);
//阻塞式获取结果,subscribe()为非阻塞
 Map block = mapFlux.blockFirst();

1.2.2 get请求-param传参

String BASE_URL = 接口地址;

WebClient.create(BASE_URL)
    //调用方式 post/get
    .get().uri("具体接口?参数="+参数)
    //设置header 可选
    .header(头部需要的信息)
    //调用
    .retrieve()
    //返参类型Mono / Flux  
    //使用Mono和Flux接收返回结果,一个Mono对象包含0个或1个元素,而一个Flux对象包含1个或多个元素
    .bodyToFlux(Map.class);
//阻塞式获取结果,subscribe()为非阻塞
 Map block = mapFlux.blockFirst();

注: 可能会存在类型转换失败的问题,建议转成Map

2.Hutool-调用相对简单

2.1 依赖

		<dependency>
            <groupId>cn.hutoolgroupId>
            <artifactId>hutool-allartifactId>
            dependency>
        <dependency>

2.2 接口调用举例

#post的body传参
String getResult = HttpRequest.post(BASE_URL + 具体接口)
    			//头信息,多个头信息多次调用此方法即可,此处以token举例
                .header("token", token)
    			//body传参方式
                .body(value)
    			//超时,毫秒
                .timeout(20000)
                .execute().body();
#get的param传参
String getResult = HttpRequest.get(BASE_URL + "具体接口?所需参数="+ 传参)
    			//头信息,多个头信息多次调用此方法即可,此处以token举例
                .header("token", token)
    			//超时,毫秒
                .timeout(20000)
                .execute().body();                

你可能感兴趣的:(spring,boot,java,spring)