前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >WebFlux 请求响应接口

WebFlux 请求响应接口

原创
作者头像
安宁
修改2020-07-06 10:40:47
2.6K0
修改2020-07-06 10:40:47
举报
文章被收录于专栏:Spring Cloud 微服务

简单介绍 org.springframework:spring-webflux 中的请求响应接口。

1. 请求响应模型

Figure 1. 请求响应模型

2. 客户端视角

2.1. 客户端

客户端用于发送请求获得响应。相关接口包括 ExchangeFunctionWebClientWebClient 封装至 ExchangeFunction,可以通过链式写法构造并发送请求。

2.1.1. ExchangeFunction 交换函数

Figure 2. 交换函数类图

用法示例

代码语言:javascript
复制
//构造交换函数
ExchangeFunction exchangeFunction = ExchangeFunctions.create(new ReactorClientHttpConnector());
//构造请求
ClientRequest<Void> request = ClientRequest.method(HttpMethod.GET, "https://example.com/resource").build();

//发送请求并获得响应
Mono<String> result = exchangeFunction
   .exchange(request)
   .then(response -> response.bodyToMono(String.class));
2.1.2. WebClient Web 客户端

Figure 3. web客户端类图

用法示例

代码语言:javascript
复制
Mono<String> result = WebClient.builder()
        .baseUrl("https://example.com/resource")
        .build()
        .get()
        .retrieve()
        .bodyToMono(String.class);

ExchangeFunction 的分步操作,通过 WebClient 的链式操作实现。

2.2. 客户端过滤器 ExchangeFilterFunction

Figure 4. 客户端拦截器原理

  • 在实际发出请求之后处理请求
  • 在实际获得响应之前处理响应

用法示例(基于 ExchangeFunction )

代码语言:javascript
复制
ExchangeFunction exchangeFunction = ExchangeFunctions.create(new ReactorClientHttpConnector());
ClientRequest<Void> request = ClientRequest.method(HttpMethod.GET, "https://example.com/resource").build();

Mono<String> result = exchangeFunction
   //添加一个过滤器,什么也没做
   .filter((clientRequest, exchangeFunction) -> exchangeFunction.exchange(clientRequest)) 
   .exchange(request)
   .then(response -> response.bodyToMono(String.class));

用法示例(基于 WebClient )

代码语言:javascript
复制
Mono<String> result = WebClient.builder()
        .baseUrl("https://example.com/resource")
         //添加一个过滤器,什么也没做
        .filter((clientRequest, exchangeFunction) -> exchangeFunction.exchange(clientRequest))
        .build()
        .get()
        .retrieve()
        .bodyToMono(String.class);

2.3. 客户端请求 ClientRequest

包含客户端请求的具体信息。

Figure 5. 客户端请求类图

2.4. 客户端响应 ClientResponse

包含客户端响应的具体信息。

Figure 6. 客户端响应类图

3. 服务端视角

服务端处理流程如下:

Figure 7. 服务端处理流程

3.1. 服务端路由函数 RouterFunction

Figure 8. 服务端路由函数类图

3.2. 服务端处理函数 HandlerFunction

由程序员最终实现的末端函数。

Figure 9. 服务端处理函数类图

3.3. 服务端过滤器 HandlerFilterFunction

  • 在实际接收请求之前处理请求
  • 在实际输出响应之后处理响应

3.4. 服务端请求 ServerRequest

包含请求的具体信息。

Figure 10. 服务端请求

3.5. 服务端响应 ServerResponse

包含响应的具体信息。

Figure 11. 服务端响应

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 请求响应模型
  • 2. 客户端视角
    • 2.1. 客户端
      • 2.1.1. ExchangeFunction 交换函数
      • 2.1.2. WebClient Web 客户端
    • 2.2. 客户端过滤器 ExchangeFilterFunction
      • 2.3. 客户端请求 ClientRequest
        • 2.4. 客户端响应 ClientResponse
        • 3. 服务端视角
          • 3.1. 服务端路由函数 RouterFunction
            • 3.2. 服务端处理函数 HandlerFunction
              • 3.3. 服务端过滤器 HandlerFilterFunction
                • 3.4. 服务端请求 ServerRequest
                  • 3.5. 服务端响应 ServerResponse
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档