精讲响应式WebClient第3篇-POST、DELETE、PUT方法使用
本文是精讲响应式WebClient第3篇,前篇的blog访问地址如下:
一、RESTful风格与HTTP method
熟悉RESTful风格的朋友,应该了解RESTful风格API使用HTTP method表达对资源的操作。
| 常用HTTP方法 | RESTful风格语义(操作) |
|---|---|
| GET | 查询、获取数据 |
| POST | 新增、提交数据 |
| DELETE | 删除数据 |
| PUT | 更新、修改数据 |
在上一篇文章中我们已经为大家介绍了如何使用WebClient作为Http客户端发送GET请求与进行响应结果的接收。本节来为大家介绍POST、DELETE、PUT。
POST等其他的方法在与GET方法在使用如下方法的时候是一致的:
- block()阻塞获取响应结果的方法,subscribe()非阻塞异步结果订阅方法
- retrieve()获取HTTP响应体,exchange()除了获取HTTP响应体,还可以获取HTTP 状态码、headers、cookies等HTTP报文信息。
- 使用Mono接收单个对象的响应结果,使用Flux接收集合类对象的响应结果。
- 占位符语法传参方式
所以想了解以上信息,请去参考: 精讲响应式WebClient第2篇-GET请求阻塞与非阻塞调用方法详解。 本文只介绍POST、DELETE、PUT在使用过程中与GET不一样的地方。
为了方便后续开发测试,首先介绍一个网站给大家。JSONPlaceholder是一个提供免费的在线REST API的网站,我们在开发时可以使用它提供的url地址测试下网络请求以及请求参数。或者当我们程序需要获取一些模拟数据、模拟图片时也可以使用它。
二、Post请求发送JSON字符串、对象、表单数据
2.1.使用Post方法向服务端发送JSON字符串数据
public class OtherTest {
//创建webClient
private WebClient webClient = WebClient.builder()
.baseUrl("http://jsonplaceholder.typicode.com")
.build();
@Test
public void testPostJsonStr() {
// 提交给服务端的JSON字符串
String jsonStr = "{\"userId\": 1,\"title\": \"zimugtest\",\"body\": \"字母哥进行测试\"}";
// 发送请求
Mono<String> mono = webClient
.post() // POST 请求
.uri("/posts") // 请求路径
.contentType(MediaType.APPLICATION_JSON) //JSON数据类型
.body(BodyInserters.fromValue(jsonStr)) //JSON字符串数据
.retrieve() // 获取响应体
.bodyToMono(String.class); //响应数据类型转换
// 输出结果
System.out.println(mono.block());
}
}
响应结果打印如下,"http://jsonplaceholder.typicode.com/posts/1" 服务的请求数据就是响应数据。响应结果同样是一个JSON字符串:

2.2.将对象以JSON数据形式发送服务端
@Test
public void testPostJson() {
//构建请求发送对象
PostDTO postDTO = new PostDTO();
postDTO.setUserId(110);
postDTO.setTitle("zimug-test");
postDTO.setBody("字母哥进行Post测试");
//发送请求
Mono<PostDTO> mono = webClient
.post() // 发送POST 请求
.uri("/posts") //服务请求路径,基于baseurl
.contentType(MediaType.APPLICATION_JSON) //以JSON数据格式
.bodyValue(postDTO) //发送请求体,对象形式
.retrieve() // 获取响应体
.bodyToMono(PostDTO.class); //响应数据类型转换
// 输出结果
System.out.println("=====" + mono.block());
}
响应结果打印如下,使用PostDTO接收响应结果。因为 "http://jsonplaceholder.typicode.com/posts/1" 服务的请求数据就是响应数据。打印结果是PostDTO对象的toString()方法

2.3.POST模拟表单数据提交
@Test
public void testFormSubmit() {
//表单数据参数设置
MultiValueMap<String, String> map = new LinkedMultiValueMap<>();
map.add("title", "zimug-test");
map.add("body", "字母哥进行测试");
// 发送请求
Mono<String> mono = webClient
.post() // 发送POST 请求
.uri("/posts") // 请求路径
.contentType(MediaType.APPLICATION_FORM_URLENCODED) //表单数据类型
.body(BodyInserters.fromFormData(map)) //表单数据
.retrieve() // 获取响应体
.bodyToMono(String.class); //响应数据类型转换
// 输出结果
System.out.println(mono.block());
}
}
因为使用字符串的方式接受响应结果,所以输出和《2.1.使用Post方法向服务端发送JSON字符串数据》输出结果是一样的。
三、使用 DELETE方法去删除资源
删除一个已经存在的资源,使用webClient的delete()方法。该方法会向URL代表的资源发送一个HTTP DELETE方法请求。
@Test
public void testDelete() {
// 发送Delete请求
webClient.delete().uri("/posts/1"); // 请求路径
}
在前面章节测试类的基础上,写如上代码的测试用例。上面代码含义为删除posts列表里面的第1个帖子。
四、使用PUT方法去修改资源
修改一个已经存在的资源,使用webClient的put()方法。该方法会向URL代表的资源发送一个HTTP PUT方法请求。
@Test
public void testPut() {
//要修改的数据对象
PostDTO postDTO = new PostDTO();
postDTO.setId(1);
postDTO.setBody("字母哥进行Put测试");
Mono<PostDTO> mono = webClient
.put()
.uri("/posts/1") //服务请求路径,基于baseurl
.contentType(MediaType.APPLICATION_JSON)
.bodyValue(postDTO) //发送请求体
.retrieve() // 获取响应体
.bodyToMono(PostDTO.class); //响应数据类型转换
// 输出结果
System.out.println("=====" + mono.block());
}
上面代码RESTful风格语义是:修改posts列表里面的第1个帖子。输出结果如下,是修改数据之后的结果:

欢迎关注我的博客,里面有很多精品合集
- 本文转载注明出处(必须带连接,不能只转文字):字母哥博客。
觉得对您有帮助的话,帮我点赞、分享!您的支持是我不竭的创作动力! 。另外,笔者最近一段时间输出了如下的精品内容,期待您的关注。
- 《手摸手教你学Spring Boot2.0》
- 《Spring Security-JWT-OAuth2一本通》
- 《实战前后端分离RBAC权限管理系统》
- 《实战SpringCloud微服务从青铜到王者》
- 《VUE深入浅出系列》
精讲响应式WebClient第3篇-POST、DELETE、PUT方法使用的更多相关文章
- 精讲响应式WebClient第2篇-GET请求阻塞与非阻塞调用方法详解
本文是精讲响应式WebClient第2篇,前篇的blog访问地址如下: 精讲响应式webclient第1篇-响应式非阻塞IO与基础用法 在上一篇文章为大家介绍了响应式IO模型和WebClient的基本 ...
- 精讲响应式WebClient第4篇-文件上传与下载
本文是精讲响应式WebClient第4篇,前篇的blog访问地址如下: 精讲响应式webclient第1篇-响应式非阻塞IO与基础用法 精讲响应式WebClient第2篇-GET请求阻塞与非阻塞调用方 ...
- 精讲响应式WebClient第5篇-请求超时设置与异常处理
本文是精讲响应式WebClient第5篇,前篇的blog访问地址如下: 精讲响应式webclient第1篇-响应式非阻塞IO与基础用法 精讲响应式WebClient第2篇-GET请求阻塞与非阻塞调用方 ...
- 精讲响应式WebClient第6篇-请求失败自动重试机制,强烈建议你看一看
本文是精讲响应式WebClient第6篇,前篇的blog访问地址如下: 精讲响应式webclient第1篇-响应式非阻塞IO与基础用法 精讲响应式WebClient第2篇-GET请求阻塞与非阻塞调用方 ...
- 精讲响应式webclient第1篇-响应式非阻塞IO与基础用法
笔者在之前已经写了一系列的关于RestTemplate的文章,如下: 精讲RestTemplate第1篇-在Spring或非Spring环境下如何使用 精讲RestTemplate第2篇-多种底层HT ...
- 小书MybatisPlus第7篇-代码生成器的原理精讲及使用方法
本文是本系列文章的第七篇,前6篇访问地址如下: 小书MybatisPlus第1篇-整合SpringBoot快速开始增删改查 小书MybatisPlus第2篇-条件构造器的应用及总结 小书Mybatis ...
- 小书MybatisPlus第8篇-逻辑删除实现及API细节精讲
本文为Mybatis Plus系列文章的第8篇,前7篇访问地址如下: 小书MybatisPlus第1篇-整合SpringBoot快速开始增删改查 小书MybatisPlus第2篇-条件构造器的应用及总 ...
- 响应式Spring Cloud初探
响应式Spring Cloud初探 分类:工程原文链接:The Road to Reactive Spring Cloud作者: JOSH LONG译者: helloworldtang日期:JUNE ...
- 浅谈响应式Web设计与实现思路
是否还在为你的应用程序适配PC端,移动端,平板而苦苦思索呢,是否在寻找如何一套代码适配多终端方式呢,是否希望快速上手实现你的跨终端应用程序呢,是的话,那就看过来吧,本文阐述响应式UI设计相关理论基础, ...
随机推荐
- Apache HTTP Server 虚拟主机配置
Apache HTTP Server 虚拟主机配置(三) 什么是虚拟主机 "虚拟主机"是指在一个机器上运行多个网站(比如:www.company1.com 和 www.c ...
- Day16_授权中心
学于黑马和传智播客联合做的教学项目 感谢 黑马官网 传智播客官网 微信搜索"艺术行者",关注并回复关键词"乐优商城"获取视频和教程资料! b站在线视频 总结 1 ...
- org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/book]] Tomcat ServletXml 异常
此异常是因为xml配置serlvet-url-pattern缺少’/’ 应该改为 /regist 背景: 写了base标签 form表单的action属性的值 个人分析: ️表单提交时 ...
- MacOS下Lucene学习
学于黑马和传智播客联合做的教学项目 感谢 黑马官网 传智播客官网 微信搜索"艺术行者",关注并回复关键词"lucene"获取视频和教程资料! b站在线视频 全文 ...
- pandas巩固
导包 import pandas as pd 设置输出结果列对齐 pd.set_option('display.unicode.ambiguous_as_wide',True) pd.set_opti ...
- 4.9 省选模拟赛 圆圈游戏 树形dp set优化建图
由于圆不存在相交的关系 所以包容关系形成了树的形态 其实是一个森林 不过加一个0点 就变成了树. 考虑对于每个圆都求出最近的包容它的点 即他的父亲.然后树形dp即可.暴力建图n^2. const in ...
- IEnumerable<T>转DataTable,为空怎么办?
public static class DataConvertor { public static DataTable ToDataTable<T>(IEnumerable<T> ...
- 三类安装VMTools失败的解决方法(Windows、Linux、MacOs)
前言 写这篇笔记的原因,是前几天在虚拟机 Vmware 中重新安装了几个操作系统,突然发现 VMTools 这个工具成了一个特殊的问题,以前还没有发现,因为通常它就给你自动安装了.但是大多数时候也是需 ...
- linux的存储管理(RALD) LVM 逻辑卷管理 虚拟阵列
磁盘存储管理 LVM 逻辑卷 虚拟阵列 1.Linux系统中 磁盘使用 存在3个大问题: 1.灵活性 2.安全性 3.性能 2.解决办法RAID独立磁盘冗余阵列 RAID(Redundant Arra ...
- MySQL中EXPLAIN命令详细解析
很多情况下我们需要知道某条SQL语句的性能,都会通过EXPLAIN命令来查看查询优化器是如何执行的. 如何使用 使用EXPLAIN很简单,只需要在执行的SQL前面加上EXPLAIN即可 explain ...