使用WebClient 发送各种请求

package com.integral.test;


import org.springframework.http.HttpStatus;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;

import org.springframework.web.reactive.function.client.ClientResponse;
import org.springframework.web.reactive.function.client.WebClient;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;

import java.util.HashMap;
import java.util.List;

/**
 * @author: create QiangShW
 * @version: v1.0
 * @description: com.integral.test
 * @date:2019/6/19
 **/

public class IntegralGoodsCss {

    /**
     * retrieve()方法是获取响应内容并对其进行解码
     * @param args
     */
    public static void main(String[] args) {
        WebClient webClient = WebClient.create();

        String url = "http://localhost:8091/flux/object";



        /**
         * get请求
         * 返回单个字符串
         */
       Mono<String> mono = webClient.get().uri("url").retrieve().bodyToMono(String.class);
       String str1 = mono.block();


        /**
         * get请求
         * 返回集合
         */
        Flux<String> flux1 = webClient.get().uri("").retrieve().bodyToFlux(String.class);

        List<String> list = flux1.collectList().block();


        String ulr1 ="http://localhost:8091/flux/object/{id}/{name}";
        /**
         * pathVable 参数
         */
        Mono<String> mono1 = webClient.get().uri(ulr1,1,"name").retrieve().bodyToMono(String.class);

        /**
         * 将同一个应用的地址+端口抽取出来
         */
        String uri = "http://localhost:8091";

        WebClient webClient1 = WebClient.create(uri);

        webClient1.get().uri("/flux/flux1").retrieve().bodyToMono(String.class);

        /**
         * form表单提交
         * 发送post请求
         */

        MultiValueMap<String,Object> mvp = new LinkedMultiValueMap<>();

        mvp.add("param1","1");
        mvp.add("param2","2");
        mvp.add("param3","3");
        WebClient.create().post().uri("http://localhost:8091/login").syncBody(mvp).header("请求头").retrieve()
                .bodyToMono(String.class);

        /**
         * exchange
         * 获取到响应的头信息、Cookie等
         */
        Mono<ClientResponse> mono2 = webClient1.post().uri("/login").syncBody(new HashMap<>()).exchange();
        ClientResponse clientResponse = mono2.block();
        if(clientResponse.statusCode()== HttpStatus.OK){
            Mono<String> mono3 = clientResponse.bodyToMono(String.class);
        }
    }



}
/* 实战列子  post请求 添加请求头 拿到返回http请求状态 返回内容*/
/* 为WebClient 请求泛的http状态不是200就会报错,先判断返回的请求状态是200,然后在处理返回的内容*/
Mono<ClientResponse> para_config = WebClient.create().post().uri(b.get("PARA_CONFIG"))
                        .header("X-APP-ID", heands.getString("X-APP-ID"))
                        .header("X-APP-KEY", heands.getString("X-APP-KEY"))
                        .header("Content-Type", "application/json")
                        .syncBody(req).exchange();
                ClientResponse response = para_config.block();
                //请求后返回的http状态
               int httpStatus = response.statusCode().value();
               //请求后返回的内容
               String result =  response.bodyToMono(String.class).block();
                log.info("请求参数{}调用套餐接口变更返回结果{}", req, result);
发送表单提交
  
   public static void main(String[] args) {
        /*拼接表单参数*/
        MultiValueMap<String, String> clientParam = new LinkedMultiValueMap<>();
        clientParam.add("operate", "add_To");
        clientParam.add("phoneNo", phoneNum.toString());
        clientParam.add("mngrServiceNo", param.get("mngrServiceNo").toString());
        clientParam.add("saleInstName", param.get("saleInstName").toString());
        clientParam.add("taskId", order.getContactOrderId().toString());
        /*发起请求*/
        ClientResponse response = WebClient.create(url)
                .post().headers(header -> {
                    header.add("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
                    return;
                }).body(BodyInserters.fromFormData(clientParam)).exchange().block();
        /*获取状态码*/
        int httpValue = response.statusCode().value();
    }

maven依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-webflux</artifactId>
    <version>2.3.3.RELEASE</version>
</dependency>
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值