项目结构附图如下:

1. 准备服务提供者

1.1 创建service-provider的项目

1.1.1 pom.xml如下:

  <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.16.RELEASE</version></parent><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency></dependencies>

1.1.2 application.yml如下

server:port: 8080
spring:application:name: post-get-provider

1.1.4 入口类App.java

@SpringBootApplication
public class App {public static void main(String[] args) {SpringApplication.run(App.class,args);}
}

1.1.5 接口类TestController.java,主要是为了给restTemplate提供访问的地址准备的。

@RestController
public class TestController {/*** 1.无参数get请求*/@GetMapping("/get")public String get() {return "无参数 get";}/*** 2.有参数get请求  问号传参*/@GetMapping("/get1")public String get1(@RequestParam("name") String name) {return "有参 get :" + name;}/*** 3.有参get请求 restful风格*/@GetMapping("/get2/{name}")public List<User> get2(@PathVariable("name") String name) {List<User> list = new ArrayList<>();for (int i = 0; i < 4; i++) {User user = new User();user.setId(i);user.setName("tom--" + i);user.setHobby("cup-" + i);list.add(user);}return list;}/*** 4.get需要设置header*/@GetMapping("/get3")public String get3(@RequestParam("name") String name, @RequestHeader("token") String token) {return "设置header的get: name: " + name + ",token:" + token;}/*** 4.1 .get需要设置header 返回值是List*/@GetMapping("/get4")public List<User> get4(@RequestParam("name") String name, @RequestHeader("token") String token) {List<User> list = new ArrayList<>();for (int i = 0; i < 4; i++) {User user = new User();user.setId(i);user.setName("tom--" + i);user.setHobby("cup-" + i);list.add(user);}return list;}/*** 4.2 .get需要设置header 返回值是对象*/@GetMapping("/get5")public User get5(@RequestParam("name") String name, @RequestHeader("token") String token) {User user = new User();user.setId(1111);user.setName("tom");user.setHobby("baskeball");return user;}/*** 4.3 .get需要设置header 返回值是对象 带有泛型*/@GetMapping("/get6")public Student<User> get6(@RequestParam("name") String name, @RequestHeader("token") String token) {User user = new User();user.setId(1111);user.setName("tom");user.setHobby("baskeball");Student<User> su = new Student<>();su.setId(user.getId() + "");su.setName(user.getName());su.setT(user);System.out.println(su.toString());return su;}/*** 5.post请求*/@PostMapping("/post")public User post1(@RequestBody User user) {user.setId(1111);user.setName("tom");user.setHobby("baskeball");return user;}/*** 6.post请求 带有header*/@PostMapping("/post2")public User post2(@RequestBody User user, @RequestHeader("token") String token) {user.setId(1111);user.setName(user.getName() + ":" + token);user.setHobby(user.getHobby() + ":" + token);return user;}/*** 7.post请求 带有header 带有问号传参*/@PostMapping("/post3")public User post3(@RequestParam("name")String name,@RequestBody User user,@RequestHeader String token){user.setName(name);user.setId(11111);user.setHobby(token);return user;}/*** 8.post请求 带有header 带有restful风格传参*/@PostMapping("/post4/{name}")public User post4(@PathVariable("name")String name,@RequestBody User user,@RequestHeader("token") String token){user.setName(name);user.setId(11111);user.setHobby(token);return user;}/*** 9.post请求 form表单提交参数*/@PostMapping("/post5")public User post5(User user){user.setHobby("post5");user.setId(999);user.setName("9090");return user;}/*** 9.post请求 form表单提交对象参数,带有header,带有问号传参*/@PostMapping("/post6")public User post6(User user,@RequestParam("name")String name,@RequestHeader("token")String token){user.setHobby("post5");user.setId(999);user.setName("9090");return user;}
}

1.1.6 实体类User.java,省略get/set方法

public class User {private int id;private String name;private String hobby;
}

1.1.7 实体类Student.java,省略get/set方法

public class Student<T> {private String id;private String name;private T t;
}

1.1.8 运行App.java,提供接口服务。

2.服务消费者

2.1 创建service-consumer的项目

2.1.1 pom.xml如下:

  <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.16.RELEASE</version></parent><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.72</version></dependency></dependencies>

2.1.2 application.yml

server:port: 8081
spring:application:name: post-get-consumer

2.1.3 App.java启动类

@SpringBootApplication
public class App {public static void main(String[] args) {SpringApplication.run(App.class,args);}
}

2.1.4 RestTemplateConfig.java配置类

@Configuration
public class RestTemplateConfig {@Beanpublic RestTemplate restTemplate(){return new RestTemplate();}
}

2.1.5 实体类Student.java

public class Student<T> {private String id;private String name;private T t;
}

2.1.6 实体类User.java

public class User {private int id;private String name;private String hobby;
}

2.1.7 测试类AppTest.java

@RunWith(SpringRunner.class)
@SpringBootTest(classes = App.class)
public class AppTest {@Autowiredprivate RestTemplate restTemplate;/*** 1.无参数 get请求*/@Testpublic void test1() {String result = restTemplate.getForObject("http://localhost:8080/get", String.class);System.out.println(result);}/*** 2.有参数 get请求 问号传参*/@Testpublic void test2() {String result = restTemplate.getForObject("http://localhost:8080/get1?name=zs", String.class);System.out.println(result);}/*** 3.有参数 get请求 restful风格参数 返回值是List*/@Testpublic void test3() {List result = restTemplate.getForObject("http://localhost:8080/get2/lisi", List.class);System.out.println(result);}/*** 4.有参数 get请求 需要设置header值  返回值是基础类型String*/@Testpublic void test4() {MultiValueMap<String, String> map = new LinkedMultiValueMap<String, String>();map.add("token", "123456");HttpEntity httpEntity = new HttpEntity(map);//设置header和返回值类型RequestCallback requestCallback = restTemplate.httpEntityCallback(httpEntity, String.class);//设置响应值解析ResponseExtractor<ResponseEntity<String>> responseExtractor = restTemplate.responseEntityExtractor(String.class);ResponseEntity<String> response = restTemplate.execute("http://localhost:8080/get3?name=ww", HttpMethod.GET, requestCallback, responseExtractor);System.out.println(response.getBody());}/*** 5.有参数 get请求 需要设置header值  返回值是List类型*/@Testpublic void test5() {MultiValueMap<String, String> map = new LinkedMultiValueMap<String, String>();map.add("token", "123456");HttpEntity httpEntity = new HttpEntity(map);//设置header和返回值类型RequestCallback requestCallback = restTemplate.httpEntityCallback(httpEntity, List.class);//设置响应值解析ResponseExtractor<ResponseEntity<List>> responseExtractor = restTemplate.responseEntityExtractor(List.class);ResponseEntity<List> response = restTemplate.execute("http://localhost:8080/get4?name=ww", HttpMethod.GET, requestCallback, responseExtractor);System.out.println(response.getBody());}/*** 6.有参数 get请求 需要设置header值  返回值是对象类型*/@Testpublic void test6() {MultiValueMap<String, String> map = new LinkedMultiValueMap<String, String>();map.add("token", "123456");HttpEntity httpEntity = new HttpEntity(map);//设置header和返回值类型RequestCallback requestCallback = restTemplate.httpEntityCallback(httpEntity, User.class);//设置响应值解析ResponseExtractor<ResponseEntity<User>> responseExtractor = restTemplate.responseEntityExtractor(User.class);ResponseEntity<User> response = restTemplate.execute("http://localhost:8080/get5?name=ww", HttpMethod.GET, requestCallback, responseExtractor);System.out.println(response.getBody().toString());}/*** 7.有参数 get请求 需要设置header值  返回值是对象类型 带有泛型*/@Testpublic void test7() {MultiValueMap<String, String> map = new LinkedMultiValueMap<String, String>();map.add("token", "123456");HttpEntity httpEntity = new HttpEntity(map);//设置header和返回值类型RequestCallback requestCallback = restTemplate.httpEntityCallback(httpEntity, Student.class);//设置响应值解析ResponseExtractor<ResponseEntity<Student>> responseExtractor = restTemplate.responseEntityExtractor(Student.class);ResponseEntity<Student> response = restTemplate.execute("http://localhost:8080/get6?name=ww", HttpMethod.GET, requestCallback, responseExtractor);System.out.println(response.getBody().toString());}/*** 7.有参数 get请求 需要设置header值  返回值是对象 使用Object 接收*/@Testpublic void test8() {MultiValueMap<String, String> map = new LinkedMultiValueMap<String, String>();map.add("token", "123456");HttpEntity httpEntity = new HttpEntity(map);//设置header和返回值类型RequestCallback requestCallback = restTemplate.httpEntityCallback(httpEntity, Object.class);//设置响应值解析ResponseExtractor<ResponseEntity<Object>> responseExtractor = restTemplate.responseEntityExtractor(Object.class);ResponseEntity<Object> response = restTemplate.execute("http://localhost:8080/get6?name=ww", HttpMethod.GET, requestCallback, responseExtractor);System.out.println(response.toString());//使用JSON   new TypeReference带上泛型,解析ObjectStudent<User> result = JSON.parseObject(JSON.toJSONString(response.getBody()), new TypeReference<Student<User>>() {});System.out.println(result.toString());}//-----------------------------post------------------------------------------------------------/*** post  请求   对象参数  postForEntity*/@Testpublic void test9() {String url = "http://localhost:8080/post";JSONObject param = new JSONObject();param.put("id", 1);param.put("name", "adff");param.put("hobby", "afdfasdfds");/*** postForEntity::* url: 请求的地址* param: 请求的参数-必须是JSONObject* User.class: 返回值的泛型class*/ResponseEntity<User> rs = restTemplate.postForEntity(url, param, User.class);System.out.println(JSON.toJSONString(rs.getBody()));}/*** post 请求 对象参数  方式二  postForObject*/@Testpublic void test10() {String url = "http://localhost:8080/post";User user = new User();user.setId(222);user.setName("fdafdsf");user.setHobby("Fdsafds");/*** postForObject:* url: 请求的地址* user: 请求的参数-必须是实体对象* User.class: 返回值的泛型class*/User rs = restTemplate.postForObject(url, user, User.class);System.out.println(JSON.toJSONString(rs.toString()));}/*** post 请求  对象参数 带有header*/@Testpublic void test11() {String url = "http://localhost:8080/post2";//创建Header对象,设置header信息和请求方式HttpHeaders headers = new HttpHeaders();headers.add("token","xxx");headers.setContentType(MediaType.APPLICATION_JSON);User user1 = new User();user1.setId(1111);user1.setName("fdasf");user1.setHobby("fdsaf");//将header信息和请求参数封装在HttpEntity中HttpEntity<User> userHttpEntity = new HttpEntity<>(user1, headers);User user = restTemplate.postForObject(url, userHttpEntity, User.class);System.out.println(user.toString());}/*** post 请求  对象参数  带有header 带有问号传参*/@Testpublic void test12(){String url = "http://localhost:8080/post3?name=nihao";//创建Header对象,设置header信息和请求方式HttpHeaders headers = new HttpHeaders();headers.add("token","xxx");headers.setContentType(MediaType.APPLICATION_JSON);User user1 = new User();user1.setId(1111);user1.setName("fdasf");user1.setHobby("fdsaf");//将header信息和请求参数封装在HttpEntity中HttpEntity<User> userHttpEntity = new HttpEntity<>(user1, headers);User user = restTemplate.postForObject(url, userHttpEntity, User.class);System.out.println(user.toString());}/*** post 请求  对象参数  带有header 带有restful风格传参*/@Testpublic void test13(){String url = "http://localhost:8080/post4/ww";//创建Header对象,设置header信息和请求方式HttpHeaders headers = new HttpHeaders();headers.add("token","xxx");headers.setContentType(MediaType.APPLICATION_JSON);User user1 = new User();user1.setId(1111);user1.setName("fdasf");user1.setHobby("fdsaf");//将header信息和请求参数封装在HttpEntity中HttpEntity<User> userHttpEntity = new HttpEntity<>(user1, headers);User user = restTemplate.postForObject(url, userHttpEntity, User.class);System.out.println(user.toString());}/*** post 请求  对象参数  表单请求方式  直接使用对象传参*/@Testpublic void test14(){String url = "http://localhost:8080/post5";User user = new User();user.setId(222);user.setName("fdafdsf");user.setHobby("Fdsafds");/*** postForObject:* url: 请求的地址* user: 请求的参数-必须是实体对象* User.class: 返回值的泛型class*/User rs = restTemplate.postForObject(url, user, User.class);System.out.println(JSON.toJSONString(rs.toString()));}/*** post 请求  对象参数  表单请求方式  使用MultiValueMap传递参数*/@Testpublic void test15(){String url = "http://localhost:8080/post5";LinkedMultiValueMap<String, Object> map = new LinkedMultiValueMap<>();map.add("id",111);map.add("name","fdasf");map.add("hobby","fdsafdsa");/*** postForObject:* url: 请求的地址* user: 请求的参数-必须是实体对象* User.class: 返回值的泛型class*/User rs = restTemplate.postForObject(url, map, User.class);System.out.println(JSON.toJSONString(rs.toString()));}/*** post 请求 表单请求方式  对象传参  问号传参 带有header 方式2: 使用MultiValueMap传参*/@Testpublic void test16(){String url = "http://localhost:8080/post6?name=nihao";//创建Header对象,设置header信息和请求方式HttpHeaders headers = new HttpHeaders();headers.add("token","xxx");headers.setContentType(MediaType.APPLICATION_JSON);User user1 = new User();user1.setId(1111);user1.setName("fdasf");user1.setHobby("fdsaf");//将header信息和请求参数封装在HttpEntity中HttpEntity<User> userHttpEntity = new HttpEntity<>(user1, headers);User user = restTemplate.postForObject(url, userHttpEntity, User.class);System.out.println(user.toString());}/*** post 请求 表单请求方式  对象传参  问号传参 带有header 方式1: 使用对象传参*/@Testpublic void test17(){String url = "http://localhost:8080/post6?name=nihao";//创建Header对象,设置header信息和请求方式HttpHeaders headers = new HttpHeaders();headers.add("token","xxx");headers.setContentType(MediaType.APPLICATION_JSON);LinkedMultiValueMap<String, Object> map = new LinkedMultiValueMap<>();map.add("id",111);map.add("name","fdasf");map.add("hobby","fdsafdsa");//将header信息和请求参数封装在HttpEntity中HttpEntity<LinkedMultiValueMap<String, Object>> entity = new HttpEntity<>(map, headers);User user = restTemplate.postForObject(url, entity, User.class);System.out.println(user.toString());}
}

Springboot RestTemplate post/get请求所有情况相关推荐

  1. 拦截器获取请求参数post_「SpringBoot WEB 系列」RestTemplate 之自定义请求头

    [WEB 系列]RestTemplate 之自定义请求头 上一篇介绍了 RestTemplate 的基本使用姿势,在文末提出了一些扩展的高级使用姿势,本篇将主要集中在如何携带自定义的请求头,如设置 U ...

  2. 使用SpringBoot RestTemplate实现第三方接口对接

    实现对接第三方接口,可以使用HttpClient(年岁较久),也可以使用SpringBoot RestTemplate(新生代).可根据个人喜好选择适当的方式进行对接,相比较HttpClient个人推 ...

  3. Spring中使用RestTemplate发送Http请求

    作为一个Java开发选手,平时调用外部服务都是通过PRC接口,而这次业务下游只提供Http接口,就有点捉急... RestTemplate的基本使用 RestTemplate是spring实现的,基于 ...

  4. Springboot如何利用http请求控制器

    写好了接口,现在想用postman测试一下这个接口是否正确,想请问怎么传入请求参数?先谢谢了! Springboot如何利用http请求控制器 >> java 这个答案描述的挺清楚的: h ...

  5. RestTemplate 发送 Https 请求调用

    RestTemplate 发送 Https 请求调用 个人博客:https://jacob.org.cn import org.apache.http.conn.ssl.NoopHostnameVer ...

  6. restTemplate发送put请求

    restTemplate发送put请求 1.没有返回体 2.有返回体 HttpHeaders headers = new HttpHeaders(); headers.setContentType(o ...

  7. spring-boot使用springAOP对接口请求、异常、响应进行日志记录

    spring-boot使用springAOP对接口请求.异常.响应进行日志记录 日志切面类LogAspect 请求control异常全局监控 日志切面类LogAspect /*** @Author: ...

  8. RestTemplate中post请求实用分析

    RestTemplate中post请求实用分析 1.最近在做相关平台对接工作.对接第一步需要在后端完成认证,拿到对方平台的access_token.由于对方文档不是很详细,根据认证需要的参数进行了多种 ...

  9. 【springboot进阶】RestTemplate 集成 okhttp3 请求带p12证书

    目录 一.创建微信支付rest模板配置类 1.创建http请求工厂 2.实例化 RestTemplate 模板对象 二.封装微信支付相关的公共请求类 三.关于扩展 1.创建证书请求工厂方法 2.请求工 ...

最新文章

  1. java心电图心率计算_java如何画心电图?
  2. android中使用DisplayMetrics获取屏幕参数
  3. mysql 5.6.11 error 1059_mysql5.6.15问题如何解决
  4. sapmto生产模式配置及操作详解_MTO生产模式简介
  5. 面试题之第一部分(Python基础篇) 80题
  6. IronRuby - 文件编码惹的祸
  7. Error: Cannot find module '@babel/core'
  8. golang | 使用结构体抄的学生信息管理系统
  9. 程序员别埋头苦干了,花时间学点薪资谈判技巧多赚一个亿可好?
  10. 写给程序员和UI--Android的切图标准
  11. spring4笔记----spring生命周期属性
  12. oralce 12c集群 ora-01033
  13. 软件工程--可行性研究过程详解
  14. 2018-2019年江苏省高等学校“阿里云大数据技术实战训练营”大学生万人计划学术冬令营开营...
  15. 面试问到UDP,这样回答offer拿到手软
  16. Java 生成N位随机数的方法
  17. 多元统计分析——聚类分析——K-均值聚类(K-中值、K-众数)
  18. 柱状图怎么添加数据python_Python数据可视化:如何用Matplotlib创建柱状图
  19. 快速下载||AnotherRedisDesktopManagerMedis-Redis可视化工具
  20. DataBase培训

热门文章

  1. 2017-2020(4周年)读书年度总结及书单
  2. resultFul请求案例
  3. BLDC无刷直流电机之电机驱动的组成
  4. java计算时间的秒数差,去掉周末和节假日
  5. 史上最全的Python定量金融三方库汇总
  6. JAVA 制作给定时间倒计时器
  7. mac 上最好用的SSH终端FinalShell
  8. 俄罗斯方块游戏shell编程代码
  9. 时间管理类入门书籍分享
  10. 哨兵机器人钢力士_“X战警”中钢力士超乎常人的防御力很强吗?他惨遭这三位打脸!...