它提供了多种访问远程http服务的方法,是一种简单便捷的访问restful服务模板类,是spring提供的用于访问Rest服务的客户端模板工具集。

1.搭建父模块

1)创建一个maven工程名为rest-template-demo,删除src目录

2)在pom中导入依赖

   <properties>
<junit.version>4.12</junit.version>
<lombok.version>1.16.18</lombok.version>
</properties> <!-- 依赖管理,父工程锁定版本-->
<dependencyManagement>
<dependencies>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</dependency>
</dependencies>
</dependencyManagement>

2.搭建公共服务模块

公共服务模块用于存放公用的东西,如实体类等。

1)创建maven的工程名为rest-template-demo-api,在pom中导入依赖

   <dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
</dependencies>

2)创建实体类User,内容如下

package com.zxh.entity;

import lombok.*;

@Data
public class User {
private Long id;
private String name;
private String phone;
}

3.搭建服务提供者模块

1)创建maven的工程名为rest-template-demo-provider,在pom中导入依赖

     <dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--引入自己定义的模块-->
<dependency>
<groupId>com.zxh</groupId>
<artifactId>rest-template-demo-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>

2)新建启动类ProviderMain8001

package com.zxh;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication
public class ProviderMain8001 {
public static void main(String[] args) {
SpringApplication.run(ProviderMain8001.class, args);
}
}

3)创建UserController类

package com.zxh.controller;

import com.zxh.entity.User;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.Map;

@RestController
@RequestMapping("/user")
public class UserController {

@GetMapping("/get/{id}")
public User getUser(@PathVariable("id") long id) {
User user = new User();
user.setId(id);
user.setName("张三");
return user;
}

@PostMapping("/add")
public Map<String, Object> addUser(User user) {
System.out.println(user);
Map<String, Object> map = new HashMap<>();
map.put("msg", "添加成功");
map.put("code", 200);
return map;
}
}

4)在资源目录下创建配置文件application.yml

server:
port: 8001

5)运行测试

启动主启动类,使用postman工具输入http://127.0.0.1:8001/user/get/2使用get方式测试,再输入http://127.0.0.1:8001/user/add?name=哈哈哈&phone=101使用post方式测试,均测试通过。

4.搭建服务消费者模块

1)创建maven的工程名为rest-template-demo-consumer,在pom中导入依赖

     <dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--引入自己定义的模块-->
<dependency>
<groupId>com.zxh</groupId>
<artifactId>rest-template-demo-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>

2)新建启动类ConsumerMain80

package com.zxh;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication
public class ConsumerMain80 {
public static void main(String[] args) {
SpringApplication.run(ConsumerMain80.class, args);
}
}

3)创建配置类

package com.zxh.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate; //相当于spring中的applicationContext.xml
@Configuration
public class ConfigBean { @Bean
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}

4)创建UserController,调用服务提供者

package com.zxh.controller;

import com.zxh.entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.client.RestTemplate; import java.util.Map; @RestController
@RequestMapping("/consumer")
public class UserController {
private final String BASE_URL = "http://127.0.0.1:8001"; @Autowired
private RestTemplate restTemplate; @GetMapping("/get/{id}")
public User getUser(@PathVariable("id") long id) {
return restTemplate.getForObject(BASE_URL + "/user/get/" + id, User.class);
} @PostMapping("/add")
public Map<String, Object> addUser(User user) {
return restTemplate.postForObject(BASE_URL + "/user/add", user, Map.class);
} }

5)在资源目录下创建配置文件application.yml

server:
port: 80

6)修改rest-temp-demo-provider的UserController类中addUser方法,给User参数添加@RequestBody注解

7)运行测试

启动主启动类,使用postman工具输入http://127.0.0.1/consumer/get/1使用get方式测试,再输入http://127.0.0.1/consumer/add?name=嘻嘻嘻&phone=101使用post方式测试,均测试通过。

自此,可以看出,使用RestTemplate可以进行服务之间的调用。但是必须指定服务的域名和端口号。

RestTemplate入门的更多相关文章

  1. SpringBoot系列: RestTemplate 快速入门

    ====================================相关的文章====================================SpringBoot系列: 与Spring R ...

  2. Spring RestTemplate 的介绍和使用-入门

    RestTemplate是什么? 传统情况下在java代码里访问restful服务,一般使用Apache的HttpClient.不过此种方法使用起来太过繁琐.spring提供了一种简单便捷的模板类来进 ...

  3. Spring MVC入门(一)—— RestTemplate组件

    ClientHttpRequestFactory 它是个函数式接口,用于根据URI和HttpMethod创建出一个ClientHttpRequest来发送请求~ ClientHttpRequest它代 ...

  4. 【Day01】Spring Cloud入门-架构演进、注册中心Nacos、负载均衡Ribbon、服务调用RestTemplate与OpenFeign

    〇.课程内容 课程规划 Day1 介绍及应用场景 Day2 组件介绍及 广度 Day3 设计思想.原理和源码 Day4 与容器化的容器(服务迁移.容器编排) 一.业务架构的演进 1.单体架构时代 缺陷 ...

  5. Spring-cloud(六) Hystrix入门

    前提 一个可用的Eureka注册中心(文中以之前博客中双节点注册中心,不重要) 一个连接到这个注册中心的服务提供者 快速入门 项目搭建 搭建一个新maven项目,artifactid为Ribbon-c ...

  6. spring cloud 入门系列四:使用Hystrix 实现断路器进行服务容错保护

    在微服务中,我们将系统拆分为很多个服务单元,各单元之间通过服务注册和订阅消费的方式进行相互依赖.但是如果有一些服务出现问题了会怎么样? 比如说有三个服务(ABC),A调用B,B调用C.由于网络延迟或C ...

  7. Spring Boot微服务架构入门

    概述 还记得在10年毕业实习的时候,当时后台三大框架为主流的后台开发框架成软件行业的标杆,当时对于软件的认识也就是照猫画虎,对于为什么会有这么样的写法,以及这种框架的优势或劣势,是不清楚的,Sprin ...

  8. Spring Cloud 快速入门

     Spring Cloud快速入门 代码地址: https://gitee.com/gloryxu/spring-cloud-test EureKa:服务注册中心 添加依赖 <dependenc ...

  9. Spring Cloud 入门教程(七): 熔断机制 -- 断路器

    对断路器模式不太清楚的话,可以参看另一篇博文:断路器(Curcuit Breaker)模式,下面直接介绍Spring Cloud的断路器如何使用. SpringCloud Netflix实现了断路器库 ...

  10. spring boot + vue + element-ui全栈开发入门——spring boot后端开发

    前言 本文讲解作为后端的spring boot项目开发流程,如果您还不会配置spring boot环境,就请点击<玩转spring boot——快速开始>,如果您对spring boot还 ...

随机推荐

  1. java 中的判断两个对象是否相等的比较严格的操作

    简介 RT code public class Employee{ public boolean equals(Object otherObject) { // a quick test to see ...

  2. Day6 备战CCF-CSP练习

    Day 6 题目描述 给出一个字符串和多行文字,在这些文字中找到字符串出现的那些行. 你的程序还需支持大小写敏感选项:当选项打开时,表示同一个字母的大写和小写看作不同的字符:当选项关闭时,表示同一个字 ...

  3. babylon.js 学习笔记(2)

    如何在网页中嵌入设计好的模型? 接上回继续,我们设计好精美的模型后,最终总要展示给客户,比如利用playground画了1个方块: const createScene = () => { con ...

  4. 基础篇:6.2)GD&T较线性尺寸公差的优缺点

    本章目的:理解GD&T标注对比线性/传统/坐标尺寸公差的优势,但也不要忘记其使用限制. 1.线性尺寸公差   1.1 定义 线性尺寸公差=传统尺寸公差=坐标尺寸公差. 传统尺寸公差(Tradi ...

  5. win11正式版出现驱动程序不兼容的问题

    有不少雨林木风系统的小伙伴,在电脑上安装win11正式版以后,电脑都会自动安装驱动程序,而因为是自动安装的,常常会出现驱动程序不兼容问题,导致一些硬件出现不能正常使用的问题,那样这种情况我们要如何解决 ...

  6. 一文带你玩转全志T527的GPU(2)-盈鹏飞嵌入式

    本文中涉及到产品的实际操作,该操作都是再盈鹏飞嵌入式AHD-X527主板上进行执行,AHD-X527介绍如下: AHD-X527产品特性: 采用Allwinner公司Cortex-A55八核A527/ ...

  7. AirSim+PX4+QGC实现无人机自动避障

    博客地址:https://www.cnblogs.com/zylyehuo/ 参考链接: AirSim+PX4 无人机自动避障详细教程 AirSim 配置文件修改 代码修改完成后,进入 AirSim ...

  8. 当物理定律与高精度计算相遇:我的新开源项目 N-Body

    大家好,今天想和大家聊聊我计划投入的下一个开源项目:n-body--一个天体运动模拟程序. 缘起:物理世界的纯粹之美 多年前,我就曾被物理世界的简洁与优雅所深深吸引,尝试用 C++.JavaScrip ...

  9. this[kHandle] = new _Hash(algorithm, xofLe

    QUICK FIX You can try downgrade the version. But as a quick fix you can do the below options. On Uni ...

  10. [题解]P10185 [YDOI R1] Necklace

    P10185 [YDOI R1] Necklace 容易写出答案为: \[\large\sum\limits_{i=1}^n\Big(2^{S-a_i}\sum\limits_{j=1}^{a_i}( ...