最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

spring boot使用WebClient調用HTTP服務代碼示例

 更新時間:2019年12月03日 14:29:36   作者:慕塵  
這篇文章主要介紹了spring boot使用WebClient調用HTTP服務代碼示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

這篇文章主要介紹了spring boot使用WebClient調用HTTP服務代碼示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

WebClient的請求模式屬于異步非阻塞,能夠以少量固定的線程處理高并發(fā)的HTTP請求

WebClient是Spring WebFlux模塊提供的一個非阻塞的基于響應式編程的進行Http請求的客戶端工具,從Spring5.0開始提供

在Spring Boot應用中

1.添加Spring WebFlux依賴

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-webflux</artifactId>
</dependency>

2.使用

(1)Restful接口demoController.java

package com.example.demo.controller;

import com.example.demo.domain.MyData;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;

@RestController
@RequestMapping("/api")
public class demoController {

  @GetMapping(value = "/getHeader", produces = {MediaType.APPLICATION_JSON_UTF8_VALUE})
  public MyData getHeader(HttpServletRequest request) {

    int id = 0;
    if (request.getParameter("id") != null) {
      id = Integer.valueOf(request.getParameter("id"));
    }
    String name = request.getParameter("name");
    //header
    String userAgent = "USER_AGENT——" + request.getHeader(HttpHeaders.USER_AGENT);
    userAgent += " | ACCEPT_CHARSET——" + request.getHeader(HttpHeaders.ACCEPT_CHARSET);
    userAgent += " | ACCEPT_ENCODING——" + request.getHeader(HttpHeaders.ACCEPT_ENCODING);
    userAgent += " | ContextPath——" + request.getContextPath();
    userAgent += " | AuthType——" + request.getAuthType();
    userAgent += " | PathInfo——" + request.getPathInfo();
    userAgent += " | Method——" + request.getMethod();
    userAgent += " | QueryString——" + request.getQueryString();
    Cookie[] cookies = request.getCookies();
    if (cookies != null) {
      for (Cookie cookie : cookies) {
        System.out.println(cookie.getName() + ":" + cookie.getValue());
      }
    }
    MyData data = new MyData();
    data.setId(id);
    data.setName(name);
    data.setOther(userAgent);
    return data;
  }

  @PostMapping(value = "/getPost", produces = {MediaType.APPLICATION_JSON_UTF8_VALUE})
  public MyData getPost(HttpServletRequest request) {

    int id = 0;
    if (request.getParameter("id") != null) {
      id = Integer.valueOf(request.getParameter("id"));
    }
    String name = request.getParameter("name");
    System.out.println(name + "," + id);
    MyData data = new MyData();
    data.setId(id);
    data.setName(name);
    return data;

  }
  /**
   * POST傳JSON請求
   */
  @PostMapping(value = "/getPostJson", produces = {MediaType.APPLICATION_JSON_UTF8_VALUE})
  public MyData getPostJson(@RequestBody(required = true) MyData data) {
    System.out.println(data.getId());
    System.out.println(data.getName());
    return data;
  }
}

MyData.java

package com.example.demo.domain;

public class MyData {
  private int id;
  private String name;
  private String other;
  public int getId() {
    return id;
  }

  public void setId(int id) {
    this.id = id;
  }

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  public String getOther() {
    return other;
  }

  public void setOther(String other) {
    this.other = other;
  }
}

(2)WebClient使用

DemoApplicationTests.java

package com.example.demo;

import com.example.demo.domain.MyData;
import org.junit.Test;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.MediaType;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.reactive.function.BodyInserters;
import org.springframework.web.reactive.function.client.WebClient;
import reactor.core.publisher.Mono;

import java.time.Duration;
import java.time.temporal.ChronoUnit;

public class DemoApplicationTests {

  private WebClient webClient = WebClient.builder()
      .baseUrl("http://127.0.0.1:8080")
      .defaultHeader(HttpHeaders.USER_AGENT, "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)")
      .defaultCookie("ACCESS_TOKEN", "test_token").build();

  @Test
  public void WebGetDemo() {

    try {
      Mono<MyData> resp = webClient.method(HttpMethod.GET).uri("api/getHeader?id={id}&name={name}", 123, "abc")
          .retrieve()
          .bodyToMono(MyData.class);
      MyData data = resp.block();
      System.out.println("WebGetDemo result----- " + data.getString());
    } catch (Exception e) {
      e.printStackTrace();
    }

  }

  @Test
  public void WebPostDemo() {
    MultiValueMap<String, String> formData = new LinkedMultiValueMap<>(2);
    formData.add("id", "456");
    formData.add("name", "xyz");

    Mono<MyData> response = webClient.method(HttpMethod.POST).uri("/api/getPost")
        .contentType(MediaType.APPLICATION_FORM_URLENCODED)
        .body(BodyInserters.fromFormData(formData))
        .retrieve()
        .bodyToMono(MyData.class).timeout(Duration.of(10, ChronoUnit.SECONDS));
    System.out.println(response);
    MyData data = response.block();
    System.out.println("WebPostDemo result----- " + data.getString());
  }

  @Test
  public void WebPostJson() {
    MyData requestData = new MyData();
    requestData.setId(789);
    requestData.setName("lmn");

    Mono<MyData> response = webClient.post().uri("/api/getPostJson")
        .contentType(MediaType.APPLICATION_JSON_UTF8)
        .syncBody(requestData)
        .retrieve()
        .bodyToMono(MyData.class).timeout(Duration.of(10, ChronoUnit.SECONDS));

    MyData data = response.block();
    System.out.println("WebPostJson result----- " + data.getString());
  }

}

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • SpringBoot在自定義類中調用service層等Spring其他層操作

    SpringBoot在自定義類中調用service層等Spring其他層操作

    這篇文章主要介紹了SpringBoot在自定義類中調用service層等Spring其他層操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Java多線程volatile原理及用法解析

    Java多線程volatile原理及用法解析

    這篇文章主要介紹了Java多線程volatile原理及用法解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-07-07
  • springboot運行時新增/更新外部接口的實現(xiàn)方法

    springboot運行時新增/更新外部接口的實現(xiàn)方法

    這篇文章主要介紹了springboot運行時新增/更新外部接口的實現(xiàn)方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • springboot獲取properties屬性值的多種方式總結

    springboot獲取properties屬性值的多種方式總結

    這篇文章主要介紹了springboot獲取properties屬性值的多種方式總結,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Go Java 算法之迷你語法分析器示例詳解

    Go Java 算法之迷你語法分析器示例詳解

    這篇文章主要為大家介紹了Go Java 算法之迷你語法分析器示例詳解,
    有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • java編寫全年考勤日歷

    java編寫全年考勤日歷

    這篇文章主要為大家詳細介紹了java編寫全年考勤日歷,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • Java HashMap的工作原理

    Java HashMap的工作原理

    這篇文章主要介紹了Java HashMap的工作原理的相關資料,需要的朋友可以參考下
    2016-03-03
  • Java中equals比較方法使用詳解

    Java中equals比較方法使用詳解

    這篇文章主要給大家介紹了關于Java中equals比較方法使用的相關資料,在Java中equals()方法是Object類的一個實例方法,用于比較兩個對象是否相等,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2023-12-12
  • Spring Boot集成Swagger接口分類與各元素排序問題

    Spring Boot集成Swagger接口分類與各元素排序問題

    這篇文章主要介紹了Spring Boot集成Swagger接口分類與各元素排序問題,首先我們需要對Swagger中的接口也就是以Controller 層作為第一級梯度進行組織的,Controller在我們實際開發(fā)中,與其他具體接口之間是存在一對多的關系,本文給大家介紹的非常詳細,需要的朋友參考下吧
    2023-10-10
  • 詳解Java編程中final,finalize,finally的區(qū)別

    詳解Java編程中final,finalize,finally的區(qū)別

    這篇文章主要介紹了詳解Java編程中final,finalize,finally的區(qū)別,這個在Java面試題中簡直是太常見了...需要的朋友可以參考下
    2015-11-11

最新評論

贵南县| 祁阳县| 武穴市| 清新县| 神农架林区| 津市市| 淳安县| 昭苏县| 大悟县| 固镇县| 山西省| 阳东县| 石屏县| 轮台县| 佳木斯市| 万荣县| 安溪县| 定陶县| 谢通门县| 榆社县| 和政县| 丰原市| 肥西县| 白河县| 西乌珠穆沁旗| 蚌埠市| 宣城市| 始兴县| 浙江省| 集贤县| 丘北县| 青铜峡市| 佛坪县| 山西省| 新宁县| 文水县| 茌平县| 冕宁县| 金塔县| 梅河口市| 江油市|