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>