本文是精讲响应式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办法申请。

@Testpublic void testDelete()  {  // 发送Delete申请  webClient.delete().uri("/posts/1");  // 申请门路}

在后面章节测试类的根底上,写如上代码的测试用例。下面代码含意为删除posts列表外面的第1个帖子。

四、应用PUT办法去批改资源

批改一个曾经存在的资源,应用webClient的put()办法。该办法会向URL代表的资源发送一个HTTP PUT办法申请。

@Testpublic 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深入浅出系列》