本文是精讲响应式WebClient第3篇,前篇的blog访问地址以下:html
熟悉RESTful风格的朋友,应该了解RESTful风格API使用HTTP method表达对资源的操做。vue
经常使用HTTP方法 | RESTful风格语义(操做) |
---|---|
GET | 查询、获取数据 |
POST | 新增、提交数据 |
DELETE | 删除数据 |
PUT | 更新、修改数据 |
在上一篇文章中咱们已经为你们介绍了如何使用WebClient做为Http客户端发送GET请求与进行响应结果的接收。本节来为你们介绍POST、DELETE、PUT。java
POST等其余的方法在与GET方法在使用以下方法的时候是一致的:web
因此想了解以上信息,请去参考: 精讲响应式WebClient第2篇-GET请求阻塞与非阻塞调用方法详解。 本文只介绍POST、DELETE、PUT在使用过程当中与GET不同的地方。spring
为了方便后续开发测试,首先介绍一个网站给你们。 JSONPlaceholder是一个提供免费的在线REST API的网站,咱们在开发时可使用它提供的url地址测试下网络请求以及请求参数。或者当咱们程序须要获取一些模拟数据、模拟图片时也可使用它。
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字符串: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()方法后端
@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字符串数据》输出结果是同样的。springboot
删除一个已经存在的资源,使用webClient的delete()方法。该方法会向URL表明的资源发送一个HTTP DELETE方法请求。cookie
@Test public void testDelete() { // 发送Delete请求 webClient.delete().uri("/posts/1"); // 请求路径 }
在前面章节测试类的基础上,写如上代码的测试用例。上面代码含义为删除posts列表里面的第1个帖子。网络
修改一个已经存在的资源,使用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个帖子。输出结果以下,是修改数据以后的结果:
以为对您有帮助的话,帮我点赞、分享!您的支持是我不竭的创做动力! 。另外,笔者最近一段时间输出了以下的精品内容,期待您的关注。