RestTemplate发送HTTP|RestTemplate发送HTTP POST请求使用方法详解

目录

  • 一、postForObject发送JSON格式请求
  • 二、postForObject模拟表单数据提交
  • 三、url支持占位符语法
  • 四、postForEntity()方法
  • 五、postForLocation()方法的使用
本文是精讲RestTemplate第4篇,前篇的blog访问地址如下:
RestTemplate在Spring或非Spring环境下使用精讲
RestTemplate实现多种底层HTTP客户端类库的切换用法
RestTemplate发送HTTP GET请求使用方法详解
在上一节为大家介绍了RestTemplate的GET请求的两个方法:getForObject()和getForEntity()。其实POST请求方法和GET请求方法上大同小异,RestTemplate的POST请求也包含两个主要方法:
postForObject()
postForEntity()
二者的主要区别在于,postForObject()返回值是HTTP协议的响应体。postForEntity()返回的是ResponseEntity,ResponseEntity是对HTTP响应的封装,除了包含响应体,还包含HTTP状态码、contentType、contentLength、Header等信息。

一、postForObject发送JSON格式请求 写一个单元测试用例,测试用例的内容是向指定的URL提交一个Post(帖子).
@SpringBootTestclass PostTests {@Resourceprivate RestTemplate restTemplate; @Testvoid testSimple(){// 请求地址String url = "http://jsonplaceholder.typicode.com/posts"; // 要发送的数据对象PostDTO postDTO = new PostDTO(); postDTO.setUserId(110); postDTO.setTitle("zimug 发布文章"); postDTO.setBody("zimug 发布文章 测试内容"); // 发送post请求,并输出结果PostDTO result = restTemplate.postForObject(url, postDTO, PostDTO.class); System.out.println(result); }}

jsonplaceholder.typicode.com是一个可以提供在线免费RESTful测试服务的一个网站”
/posts"服务接收PostDTO 参数对象,并将请求结果以JSON字符串的形式进行响应。响应结果就是请求参数对象对应的JSON字符串。
所以postForObject方法第二个参数是请求数据对象,第三个参数是返回值类型
最终将返回值的打印结果如下:
RestTemplate发送HTTP|RestTemplate发送HTTP POST请求使用方法详解
文章图片


二、postForObject模拟表单数据提交 下面给大家写一个使用postForObject模拟表单数据提交的例子,即:提交x-www-form-urlencoded格式的数据
@Testpublic void testForm() {// 请求地址String url = "http://jsonplaceholder.typicode.com/posts"; // 请求头设置,x-www-form-urlencoded格式的数据HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); //提交参数设置MultiValueMap map = new LinkedMultiValueMap<>(); map.add("title", "zimug 发布文章第二篇"); map.add("body", "zimug 发布文章第二篇 测试内容"); // 组装请求体HttpEntity request =new HttpEntity(map, headers); // 发送post请求,并打印结果,以String类型接收响应结果JSON字符串String result = restTemplate.postForObject(url, request, String.class); System.out.println(result); }

请求数据打印结果如下:
RestTemplate发送HTTP|RestTemplate发送HTTP POST请求使用方法详解
文章图片


三、 url支持占位符语法 如果url地址上面需要传递一些动态参数,可以使用占位符的方式:
String url = "http://jsonplaceholder.typicode.com/{1}/{2}"; String url = "http://jsonplaceholder.typicode.com/{type}/{id}";

具体的用法和使用GET方法请求是一致的
所以请参考: RestTemplate发送HTTP GET请求使用方法详解

四、postForEntity()方法 上面的所有的postForObject请求传参方法,postForEntity都可以使用,使用方法上也几乎是一致的,只是在返回结果接收的时候略有差别。
使用ResponseEntity responseEntity来接收响应结果。用responseEntity.getBody()获取响应体。响应体内容同postForObject方法返回结果一致。剩下的这些响应信息就是postForEntity比postForObject多出来的内容。
HttpStatus statusCode = responseEntity.getStatusCode(); 获取整体的响应状态信息
int statusCodeValue = https://www.it610.com/article/responseEntity.getStatusCodeValue(); 获取响应码值
HttpHeaders headers = responseEntity.getHeaders(); 获取响应头等
@Testpublic void testEntityPoJo() {// 请求地址String url = "http://jsonplaceholder.typicode.com/posts"; // 要发送的数据对象PostDTO postDTO = new PostDTO(); postDTO.setUserId(110); postDTO.setTitle("zimug 发布文章"); postDTO.setBody("zimug 发布文章 测试内容"); // 发送post请求,并输出结果ResponseEntity responseEntity= restTemplate.postForEntity(url, postDTO, String.class); String body = responseEntity.getBody(); // 获取响应体System.out.println("HTTP 响应body:" + postDTO.toString()); //以下是postForEntity比postForObject多出来的内容HttpStatus statusCode = responseEntity.getStatusCode(); // 获取响应码int statusCodeValue = https://www.it610.com/article/responseEntity.getStatusCodeValue(); // 获取响应码值HttpHeaders headers = responseEntity.getHeaders(); // 获取响应头System.out.println("HTTP 响应状态:" + statusCode); System.out.println("HTTP 响应状态码:" + statusCodeValue); System.out.println("HTTP Headers信息:" + headers); }

输出打印结果
RestTemplate发送HTTP|RestTemplate发送HTTP POST请求使用方法详解
文章图片


五、postForLocation() 方法的使用 postForLocation的传参的类型、个数、用法基本都和postForObject()或postForEntity()一致。和前两者的唯一区别在于返回值是一个URI。该URI返回值体现的是:用于提交完成数据之后的页面跳转,或数据提交完成之后的下一步数据操作URI。
@Testpublic void testURI() {// 请求地址String url = "http://jsonplaceholder.typicode.com/posts"; PostDTO postDTO = new PostDTO(); postDTO.setUserId(110); postDTO.setTitle("zimug 发布文章"); postDTO.setBody("zimug 发布文章 测试内容"); // 发送post请求,并输出结果URI uri = restTemplate.postForLocation(url,postDTO); System.out.println(uri); }

输出结果如下,含义是:提交了post之后,该post的id是101,可以通过如下的连接去获取数据。
RestTemplate发送HTTP|RestTemplate发送HTTP POST请求使用方法详解
文章图片

【RestTemplate发送HTTP|RestTemplate发送HTTP POST请求使用方法详解】以上就是RestTemplate发送HTTP POST请求使用方法详解的详细内容,更多关于RestTemplate发送HTTP POST请求用法的资料请关注脚本之家其它相关文章!

    推荐阅读