本文是精讲响应式 WebClient 第 3 篇,前篇的 blog 拜访地址如下:
- 精讲响应式 webclient 第 1 篇 - 响应式非阻塞 IO 与根底用法
- 精讲响应式 WebClient 第 2 篇 -GET 申请阻塞与非阻塞调用办法详解
一、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 深入浅出系列》