本文是精讲RestTemplate第4篇,前篇的blog拜访地址如下:
- 精讲RestTemplate第1篇-在Spring或非Spring环境下如何应用
- 精讲RestTemplate第2篇-多种底层HTTP客户端类库的切换
- 精讲RestTemplate第3篇-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 { @Resource private RestTemplate restTemplate; @Test void 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办法第二个参数是申请数据对象,第三个参数是返回值类型
最终将返回值的打印后果如下:
二、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<String, String> map = new LinkedMultiValueMap<>(); map.add("title", "zimug 公布文章第二篇"); map.add("body", "zimug 公布文章第二篇 测试内容"); // 组装申请体 HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<MultiValueMap<String, String>>(map, headers); // 发送post申请,并打印后果,以String类型接管响应后果JSON字符串 String result = restTemplate.postForObject(url, request, String.class); System.out.println(result);}
申请数据打印后果如下:
三、 url反对占位符语法
如果url地址下面须要传递一些动静参数,能够应用占位符的形式:
String url = "http://jsonplaceholder.typicode.com/{1}/{2}";String url = "http://jsonplaceholder.typicode.com/{type}/{id}";
具体的用法和应用GET办法申请是统一的,所以请参考: 精讲RestTemplate第3篇-GET申请应用办法详解
四、postForEntity()办法
下面的所有的postForObject申请传参办法,postForEntity都能够应用,应用办法上也简直是统一的,只是在返回后果接管的时候略有差异。应用ResponseEntity<T> responseEntity
来接管响应后果。用responseEntity.getBody()获取响应体。响应体内容同postForObject办法返回后果统一。剩下的这些响应信息就是postForEntity比postForObject多进去的内容。
HttpStatus statusCode = responseEntity.getStatusCode();
获取整体的响应状态信息int statusCodeValue = 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<String> 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 = responseEntity.getStatusCodeValue(); // 获取响应码值 HttpHeaders headers = responseEntity.getHeaders(); // 获取响应头 System.out.println("HTTP 响应状态:" + statusCode); System.out.println("HTTP 响应状态码:" + statusCodeValue); System.out.println("HTTP Headers信息:" + headers);}
输入打印后果
五、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,能够通过如下的连贯去获取数据。
欢送关注我的博客,外面有很多精品合集
- 本文转载注明出处(必须带连贯,不能只转文字):字母哥博客。
感觉对您有帮忙的话,帮我点赞、分享!您的反对是我不竭的创作能源! 。另外,笔者最近一段时间输入了如下的精品内容,期待您的关注。
- 《手摸手教你学Spring Boot2.0》
- 《Spring Security-JWT-OAuth2一本通》
- 《实战前后端拆散RBAC权限管理系统》
- 《实战SpringCloud微服务从青铜到王者》
- 《VUE深入浅出系列》