亲宝软件园·资讯

展开

SpringBoot图文教程17—上手就会 RestTemplate 使用指南「Get Post」「设置请求头」

鹿老师的Java笔记 人气:0
![](https://img2020.cnblogs.com/other/1003051/202003/1003051-20200320211029269-1539461491.png) > **有天上飞的概念,就要有落地的实现** > > - 概念十遍不如代码一遍,朋友,希望你把文中所有的代码案例都敲一遍 > > - 先赞后看,养成习惯 **SpringBoot 图文教程系列文章目录** 1. [SpringBoot图文教程1—SpringBoot+Mybatis 环境搭建](https://mp.weixin.qq.com/s/phk6j3ChBP-kPtS2xZeEZg) 2. [SpringBoot图文教程2—日志的使用「logback」「log4j」](https://mp.weixin.qq.com/s/7Mw_xhFF4Q5NtdtcsHc67Q) 3. [SpringBoot图文教程3—「‘初恋’情结」集成Jsp](https://mp.weixin.qq.com/s/BYzVg5NBcF_ou_PyX8ygag) 4. [SpringBoot图文教程4—SpringBoot 实现文件上传下载](https://mp.weixin.qq.com/s/6ctykPo3eDBEB7YsC0PAZw) 5. [SpringBoot图文教程5—SpringBoot 中使用Aop](https://mp.weixin.qq.com/s/17qMRlv_mUfwkcVD05Bh2g) 6. [SpringBoot图文教程6—SpringBoot中过滤器的使用](https://mp.weixin.qq.com/s/r2BO4UMNRAw_REA6nNFLKw) 7. [SpringBoot图文教程7—SpringBoot拦截器的使用姿势这都有](https://mp.weixin.qq.com/s/YpDhuOTpt1vjYjnhnK8YdQ) 8. [SpringBoot图文教程8—SpringBoot集成MBG「代码生成器」](https://mp.weixin.qq.com/s/uGYO4fkw03Kxpfp_PIA8rQ) 9. [SpringBoot图文教程9—SpringBoot 导入导出 Excel 「Apache Poi」](https://mp.weixin.qq.com/s/BXfxhO5rFFg6XZQ0rZgGMg) 10. [SpringBoot图文教程10—模板导出|百万数据Excel导出|图片导出「easypoi」](https://mp.weixin.qq.com/s/8Yqfn27UCFP2lU3_IYb5AQ) 11. [SpringBoot图文教程11—从此不写mapper文件「SpringBoot集成MybatisPlus」](https://mp.weixin.qq.com/s/8KG5Wj77MYEUCIRFqWBdPQ) 12. [SpringBoot图文教程12—SpringData Jpa的基本使用](https://mp.weixin.qq.com/s/gPfSjBj1hMWf23J50d5Z_g) 13. [SpringBoot图文教程13—SpringBoot+IDEA实现代码热部署](https://mp.weixin.qq.com/s/DYP_12V01D0NJGEBdwK9Ew) 14. [SpringBoot图文教程14—阿里开源EasyExcel「为百万数据读写设计」](https://mp.weixin.qq.com/s/FNuL3maNtiFCVR7hREYpLA) 15. [SpringBoot图文教程15—项目异常怎么办?「跳转404错误页面」「全局异常捕获」](https://mp.weixin.qq.com/s/O97_ZqoUCl5fICXHbSCf2Q) 16. [SpringBoot图文教程16—SpringBoot 多模块开发「web」「打包」](https://mp.weixin.qq.com/s/CDWnG0wr6hk6TvDYIELIaQ) ## 前言 问个问题:通过Java代码怎么发送Http请求,请求另一个Java程序的Controller方法呢? ![](https://img2020.cnblogs.com/other/1003051/202003/1003051-20200320211030558-449919758.png) 好像真的有点触及到知识盲区了呦 在以前的代码中,Java程序都是被请求的一方,发送请求的要么是Ajax,要么是浏览器,要么是postman等,今天就来一起学习一下如何通过Java代码发送Http请求。 ## RestTemplate 的使用 ![](https://img2020.cnblogs.com/other/1003051/202003/1003051-20200320211032680-2015702649.png) ### 准备工作「可以跳过,不影响教程学习」 因为我们要通过RestTemplate发送请求,请求另外一个项目的Controller层方法(接口),所以我们首先需要一个被请求的项目。 关于这个项目,我已经搭建好了,码云地址为:https://gitee.com/bingqilinpeishenme/boot-demo/tree/master/boot-base-rest 在项目中有三个方法,分别是测试Get请求和Post请求如下 ``` package com.lby.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; /** * @author luxiaoyang * @create 2020-03-18-20:02 */ @Controller public class TestController { /** * @GetMapping("testRestGet") 当前方法只接受Get请求 * 等价于 * @RequestMapping(path = "testRestGet",method = RequestMethod.GET) */ @GetMapping("testRestGet") @ResponseBody public String testRestGet(String username){ return "这是一个Get请求,接受参数:"+username; } /** * @PostMapping("") 当前方法只接受Post请求 * 等价于 * @RequestMapping(path = "testRestPost",method = RequestMethod.POST) */ @PostMapping("testRestPost") @ResponseBody public String testRestPost(String username){ return "这是一个Post请求,接受参数:"+username; } /** * 测试 postForLocation 给RestTemplate响应url地址 */ @PostMapping("testRestPostLocation") public String testRestPostLocation(String username){ System.out.println(username); return "redirect:/success.html"; } } ``` ### 什么是RestTemplate **Spring中封装的通过Java代码发送RestFul请求的模板类,内置发送get post delete等请求的方法**,在SpringBoot中只要导入spring-boot-starter-web的依赖可以直接使用。 ### 快速开始 确定项目中导入spring-boot-starter-web的依赖。 **第一步:配置RestTemplate** ![](https://img2020.cnblogs.com/other/1003051/202003/1003051-20200320211033651-239113789.png) ``` /** * RestTemplate配置 */ @Configuration public class RestTemplateConfig { @Bean public RestTemplate restTemplate(ClientHttpRequestFactory factory) { return new RestTemplate(factory); } @Bean public ClientHttpRequestFactory simpleClientHttpRequestFactory() { SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory(); // 超时设置 factory.setReadTimeout(5000);//ms factory.setConnectTimeout(15000);//ms return factory; } } ``` **第二步:直接使用RestTemplate的Api发送请求** 这一步,我们直接在测试类中发送Get方式的请求,进行简单的测试,感受到效果之后,再进行更多API深入的学习。 ``` package com.lby; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.web.client.RestTemplate; @RunWith(SpringRunner.class) @SpringBootTest(classes = {BootResttemplateApplication.class}) public class BootResttemplateApplicationTests { @Autowired private RestTemplate restTemplate; /** * 测试get请求 */ @Test public void test1(){ /** * getForObject * * 参数1 要请求的地址的url 必填项 * 参数2 响应数据的类型 是String 还是 Map等 必填项 * 参数3 请求携带参数 选填 * * getForObject 方法的返回值就是 被调用接口响应的数据 */ String result = restTemplate.getForObject("http://localhost:8802/product/showProductById?id=1", String.class); System.out.println(result); } } ``` ### RestTemplate的主要API | HTTP Method | RestTemplate Methods | | --- | --- | | Get | getForObject, getForEntity | | Post | postForEntity, postForObject, postForLocation | | PUT | put | | any | exchange, execute | | DELETE | delete | | HEAD | headForHeaders | | OPTIONS | optionsForAllow | 以上是RestTemplate的主要API,其中大部分的API会在后续的代码中详细讲解。 ### Get请求的所有使用方式 Get请求方式: 1. url拼接参数 2. url拼接参数「占位符的方式」 3. 获取响应实体对象「响应状态码」 ``` /** * 测试get请求 */ @Test public void test1(){ /** * getForObject * * 参数1 要请求的地址的url 必填项 * 参数2 响应数据的类型 是String 还是 Map等 必填项 * 参数3 请求携带参数 选填 * * getForObject 方法的返回值就是 被调用接口响应的数据 */ String result = restTemplate.getForObject("http://localhost:8802/testRestGet?username=zhangsan", String.class); System.out.println(result); /** * getForEntity 方法 * 参数1 要请求的地址的url 必填项 * 参数2 响应数据的类型 是String 还是 Map等 必填项 * 参数3 请求携带参数 选填 * * 返回值类型为 ResponseEntity * * 可以通过ResponseEntity 获取响应的数据,响应的状态码等信息 */ ResponseEntity

加载全部内容

相关教程
猜你喜欢
用户评论