使用WebClient发起网络请求_webclient工具类-CSDN博客文章浏览阅读717次,点赞9次,收藏8次。使用WebClient发起网络请求_webclient工具类https://blog.csdn.net/qq_43544074/article/details/137044825这个是使用工具类发起的,下面就不使用工具类进行快速发起。
同样的导入依赖
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-webflux -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId><version>3.3.4</version>
</dependency>
然后定义初始化构建一下
private final WebClient webClient;@Autowiredpublic 类名_Controller(WebClient.Builder webClientBuilder) {this.webClient = webClientBuilder.build();}// 获取请求地址@Value("${dataCenter.dc2DetailUrl}")private String dc2DetailUrl;@Value("${dataCenter.prePlatformInfoUrl}")private String prePlatformInfoUrl;@Value("${dataCenter.parmsSetUrl}")private String parmsSetUrl;
接下来就可以进行各个方式的请求和调用处理了
GET方式:
// ==[GET]=========================================@ApiOperation("数据查询接口")@Synchronized@GetMapping("/data-detail")public Mono<AjaxResult> dataLoadDetail() throws Exception {// 设置请求头信息HttpHeaders headers = new HttpHeaders();headers.setContentType(MediaType.APPLICATION_JSON);headers.set("api_permanent_key", tempToken);return webClient.get().uri(dc2DetailUrl)// 添加请求头.headers(httpHeaders -> httpHeaders.addAll(headers)).retrieve().bodyToMono(String.class).map(response -> {log.info("请求数据返回响应 response = " + response);try {// 解析 JSON 数据JSONObject jsonObject = JSONObject.parseObject(response);log.info("请求数据返回响应 jsonObject = " + jsonObject);// 将处理后的数据转换为 AjaxResult 返回return AjaxResult.success(jsonObject);} catch (Exception e) {log.error("数据处理失败: {}", e.getMessage());// JSON 解析失败return AjaxResult.error("数据处理失败" + e.getMessage());}}).onErrorResume(e -> {log.error(preCountryUrl + "GET 请求失败: {}", e.getMessage());// 这里可以进行更多的日志记录或错误处理return Mono.just(AjaxResult.error("GET 请求失败" + e.getMessage()));});}
有参数查询:
@ApiOperation("查询某个类型下的个体接口")@ApiImplicitParams({@ApiImplicitParam(name = "platTypeName", value = "类型名称", required = false, dataType = "String", paramType = "query", example = "电器", dataTypeClass = String.class),@ApiImplicitParam(name = "platTypeId", value = 类型ID", required = false, dataType = "Integer", paramType = "query", example = "5", dataTypeClass = Integer.class)})@GetMapping("/pre-platform-info")public Mono<AjaxResult> prePlatformInfo(@RequestParam(value = "platTypeName", required = false) String platTypeName,@RequestParam(value = "platTypeId", required = false) Integer platTypeId) {log.info("platTypeName = {}, platTypeId = {}", platTypeName, platTypeId);// 设置请求头信息HttpHeaders headers = new HttpHeaders();headers.setContentType(MediaType.APPLICATION_JSON);headers.set("api_permanent_key", tempToken);// 构建 URIString uri = UriComponentsBuilder.fromHttpUrl(prePlatformInfoUrl).queryParam("platTypeName", platTypeName).queryParam("platTypeId", platTypeId).toUriString();log.info("uri = {}", uri);return webClient.get().uri(uri).headers(httpHeaders -> httpHeaders.addAll(headers)).retrieve().bodyToMono(String.class).map(response -> {log.info("请求数据返回响应 response = {}", response);try {// 解析 JSON 数据JSONObject jsonObject = JSONObject.parseObject(response);// 将处理后的数据转换为 AjaxResult 返回return AjaxResult.success(jsonObject);} catch (Exception e) {log.error("JSON 解析失败", e);// JSON 解析失败return AjaxResult.error("数据处理失败: " + e.getMessage());}}).onErrorResume(e -> {log.error("GET 请求失败", e);return Mono.just(AjaxResult.error("GET 请求失败: " + e.getMessage()));});}
POST方式
// ==[POST]=========================================@ApiOperation("参数设置接口")@PostMapping("/set-predict-time")public Mono<AjaxResult> setPredictTime(@RequestBody JSONObject jsonObject) throws Exception {// 组装请求头HashMap<String, String> headers = new HashMap<>();headers.put("Content-Type", "application/json");// 组装请求体String requestBody = jsonObject.toJSONString();log.info("请求体是 " + requestBody);// 发送请求return webClient.post().uri(parmsSetUrl).header(HttpHeaders.CONTENT_TYPE, "application/json").bodyValue(requestBody) // 使用 bodyValue 直接传递请求体.retrieve().bodyToMono(String.class).flatMap(this::handleResponse) // 将响应处理逻辑提取到单独的方法中.onErrorResume(this::handleError); // 错误处理提取到方法中}// 处理响应private Mono<AjaxResult> handleResponse(String response) {log.info("请求数据返回响应 response = {}", response);try {// 解析 JSON 数据JSONObject res = JSONObject.parseObject(response);// 将处理后的数据转换为 AjaxResult 返回return Mono.just(AjaxResult.success(res.getJSONArray("rows")));} catch (Exception e) {// JSON 解析失败return Mono.just(AjaxResult.error("数据处理失败: " + e.getMessage()));}}// 错误处理private Mono<AjaxResult> handleError(Throwable e) {log.error("GET 请求失败: {}", e.getMessage(), e);return Mono.just(AjaxResult.error("GET 请求失败: " + e.getMessage()));}
@ApiOperation("参数设置接口")@PostMapping("/set-predict-time")public Mono<AjaxResult> setPredictTime(@RequestBody JSONObject jsonObject) throws Exception {// 组装请求头HashMap<String, String> headers = new HashMap<>();headers.put("Content-Type", "application/json");// 组装请求体String requestBody = jsonObject.toJSONString();log.info("请求体是 " + requestBody);// 发送请求return webClient.post().uri(parmsSetUrl).header(HttpHeaders.CONTENT_TYPE, "application/json").bodyValue(requestBody) // 使用 bodyValue 直接传递请求体.retrieve().bodyToMono(String.class).map(response -> {log.info("请求数据返回响应 response = " + response);try {// 解析 JSON 数据JSONObject res = JSONObject.parseObject(response);// 将处理后的数据转换为 AjaxResult 返回return AjaxResult.success(res);} catch (Exception e) {// JSON 解析失败return AjaxResult.error("数据处理失败" + e.getMessage());}}).onErrorResume(e -> {// 这里可以进行更多的日志记录或错误处理return Mono.just(AjaxResult.error("POST 请求失败" + e.getMessage()));});}
至此就可以快速的发起网络请求了!