乐趣区

关于spring:精讲响应式WebClient第3篇POSTDELETEPUT方法使用

本文是精讲响应式 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 深入浅出系列》
退出移动版