REST是什么

REST即表述性状态传递(英文:Representational State Transfer,简称REST)是Roy Fielding博士在2000年他的博士论文中提出来的一种软件架构风格。它是一种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性。
在三种主流的Web服务实现方案中,因为REST模式的Web服务与复杂的SOAPXML-RPC对比来讲明显的更加简洁,越来越多的web服务开始采用REST风格设计和实现。例如,Amazon.com提供接近REST风格的Web服务进行图书查找;雅虎提供的Web服务也是REST风格的。

总体介绍

会使用一个Dept部门模块作为微服务通用案例Consumer消费者(Client),通过Rest调用Provider提供者(Server)提供的服务
Spring、SpringMVC、Mybatis
Maven的分包分模块架构
一个简单的Maven模块结构
—app -parent :一个父项目(app-parent)聚合多个子项目(app-util、app-dao、app-web)
|— pom.xml
|
|—app-core
|—-pom.xml
|
|—app-web
||—pom,xml
一个父工程带多个Module子模块
MicaoServiceCloud 父工程(Project)下初次带3个子模块(Module)
MicaoServiceCloud-api (封装整体entity、接口、公共配置等)
MicaoServiceCloud-Provider-dept-8001 (服务提供者)
MicaoServiceCloud-Consumer-dept-8002(服务消费者)

SpringCloud版本选择

大版本说明
image.png
实际开发版本关系
image.png

Demo编写步骤

1:创建maven项目(父工程)

file新建new maven porject
image.png
next下一步
image.png

image.png
finish 完成,可选择删除src,因为此工程为父工程
image.png

2:修改父工程pom文件

导入相关依赖

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <modelVersion>4.0.0</modelVersion>
  6. <groupId>com.junjay</groupId>
  7. <artifactId>SpringCloud</artifactId>
  8. <version>0.0.1-SNAPSHOT</version>
  9. <!-- 1:打包方式pom -->
  10. <packaging>pom</packaging>
  11. <name>SpringCloud</name>
  12. <url>http://maven.apache.org</url>
  13. <properties>
  14. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  15. <!-- 版本控制 -->
  16. <maven.comiler.source>1.8</maven.comiler.source>
  17. <maven.comiler.targer>1.8</maven.comiler.targer>
  18. <junit.version>4.12</junit.version>
  19. <lombok.version>1.16.10</lombok.version>
  20. </properties>
  21. <dependencyManagement>
  22. <dependencies>
  23. <!-- 2:spring-cloud依赖 -->
  24. <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-dependencies -->
  25. <dependency>
  26. <groupId>org.springframework.cloud</groupId>
  27. <artifactId>spring-cloud-dependencies</artifactId>
  28. <version>Greenwich.SR1</version>
  29. <type>pom</type>
  30. <scope>import</scope>
  31. </dependency>
  32. <!-- 3:导入springboot依赖 -->
  33. <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-test -->
  34. <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-dependencies -->
  35. <dependency>
  36. <groupId>org.springframework.boot</groupId>
  37. <artifactId>spring-boot-dependencies</artifactId>
  38. <version>2.1.4.RELEASE</version>
  39. <type>pom</type>
  40. <scope>import</scope>
  41. </dependency>
  42. <!-- 4:数据库依赖 -->
  43. <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
  44. <dependency>
  45. <groupId>mysql</groupId>
  46. <artifactId>mysql-connector-java</artifactId>
  47. <version>5.1.47</version>
  48. </dependency>
  49. <!-- 5:数据源 -->
  50. <!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
  51. <dependency>
  52. <groupId>com.alibaba</groupId>
  53. <artifactId>druid</artifactId>
  54. <version>1.1.10</version>
  55. </dependency>
  56. <!-- 6:springboot启动器 -->
  57. <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter -->
  58. <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter -->
  59. <dependency>
  60. <groupId>org.springframework.boot</groupId>
  61. <artifactId>spring-boot-starter</artifactId>
  62. <version>1.3.2.RELEASE</version>
  63. </dependency>
  64. <!-- 7:junit -->
  65. <!-- https://mvnrepository.com/artifact/junit/junit -->
  66. <!-- https://mvnrepository.com/artifact/junit/junit -->
  67. <dependency>
  68. <groupId>junit</groupId>
  69. <artifactId>junit</artifactId>
  70. <version>4.12</version>
  71. <scope>test</scope>
  72. </dependency>
  73. <!-- 8:Lombok -->
  74. <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
  75. <dependency>
  76. <groupId>org.projectlombok</groupId>
  77. <artifactId>lombok</artifactId>
  78. <version>1.16.10</version>
  79. <scope>provided</scope>
  80. </dependency>
  81. <!-- 9:log4j -->
  82. <!-- https://mvnrepository.com/artifact/log4j/log4j -->
  83. <dependency>
  84. <groupId>log4j</groupId>
  85. <artifactId>log4j</artifactId>
  86. <version>1.2.17</version>
  87. </dependency>
  88. <!-- 10:logback -->
  89. <!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-core -->
  90. <dependency>
  91. <groupId>ch.qos.logback</groupId>
  92. <artifactId>logback-core</artifactId>
  93. <version>1.2.3</version>
  94. </dependency>
  95. <!-- 11: mybatis boot 启动器 -->
  96. <!-- https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter -->
  97. <dependency>
  98. <groupId>org.mybatis.spring.boot</groupId>
  99. <artifactId>mybatis-spring-boot-starter</artifactId>
  100. <version>1.3.2</version>
  101. </dependency>
  102. </dependencies>
  103. </dependencyManagement>
  104. <dependencies>
  105. <dependency>
  106. <groupId>junit</groupId>
  107. <artifactId>junit</artifactId>
  108. <version>3.8.1</version>
  109. <scope>test</scope>
  110. </dependency>
  111. </dependencies>
  112. <!-- 父工程下的子模块 -->
  113. <modules>
  114. <module>springcloud-pai</module>
  115. <module>springcloud-provider-dept-8081</module>
  116. </modules>
  117. </project>

3:创建maven项目(子工程api)

右键选中父工程,创建maven项目,选择maven module进行创建
image.png
继续下一步,完成finish。
目录层级:
image.png

4:修改子工程api-pom文件

  1. <?xml version="1.0"?>
  2. <project
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"
  4. xmlns="http://maven.apache.org/POM/4.0.0"
  5. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  6. <modelVersion>4.0.0</modelVersion>
  7. <parent>
  8. <groupId>com.junjay</groupId>
  9. <artifactId>SpringCloud</artifactId>
  10. <version>0.0.1-SNAPSHOT</version>
  11. </parent>
  12. <groupId>com.junjay</groupId>
  13. <artifactId>springcloud-pai</artifactId>
  14. <version>0.0.1-SNAPSHOT</version>
  15. <name>springcloud-pai</name>
  16. <url>http://maven.apache.org</url>
  17. <properties>
  18. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  19. </properties>
  20. <dependencies>
  21. <!-- 子工程使用父工程jar -->
  22. <!-- 当前的module自己需要的依赖,如果父工程中已经配置了版本,在引用依赖时候就不需要设置会向父工程中查找 -->
  23. <dependency>
  24. <groupId>org.projectlombok</groupId>
  25. <artifactId>lombok</artifactId>
  26. </dependency>
  27. <dependency>
  28. <groupId>junit</groupId>
  29. <artifactId>junit</artifactId>
  30. <version>3.8.1</version>
  31. <scope>test</scope>
  32. </dependency>
  33. </dependencies>
  34. </project>

子工程下新建包,org.springcloud.pojo
创建实体类Dept

  1. package org.springcloud.pojo;
  2. import java.io.Serializable;
  3. import lombok.Data;
  4. import lombok.NoArgsConstructor;
  5. import lombok.experimental.Accessors;
  6. /**
  7. * @author My 首先分布式,第一步需要网络通信,
  8. * 第二步序列化,所有的实体类必须实现序列化才可通讯
  9. */
  10. //@SuppressWarnings(“serial”)
  11. //如果编译器出现这样的警告信息:The serializable class WmailCalendar does not declare a static final serialVersionUID field of type long,使用这个注释将警告信息去掉。
  12. @SuppressWarnings("serial")
  13. @Data
  14. @NoArgsConstructor // 生成一个无参数的构造方法
  15. @Accessors(chain = true) // 链式写法
  16. public class Dept implements Serializable {
  17. /**
  18. * 主键
  19. */
  20. private Long deptno;
  21. /**
  22. * dept名称
  23. */
  24. private String dname;
  25. /**
  26. * 微服务架构,可以一个服务对应一个数据库,
  27. * 一个信息存到不同数据库,db_source标识是哪个数据库
  28. */
  29. private String db_source;
  30. public Dept(String dname) {
  31. this.dname = dname;
  32. }
  33. // 链式写法:
  34. public static void main(String[] args) {
  35. Dept dept = new Dept();
  36. dept.setDeptno(11L).setDname("aaa").setDb_source("000");
  37. }
  38. }

创建相对应数据库
image.png
完成Api子工程项目

5:创建服务提供者子工程

以 创建api 工程一样创建新工程 springcloud-provider-dept-8081
修改provider 子工程pom文件

  1. <?xml version="1.0"?>
  2. <project
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"
  4. xmlns="http://maven.apache.org/POM/4.0.0"
  5. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  6. <modelVersion>4.0.0</modelVersion>
  7. <parent>
  8. <groupId>com.junjay</groupId>
  9. <artifactId>SpringCloud</artifactId>
  10. <version>0.0.1-SNAPSHOT</version>
  11. </parent>
  12. <groupId>com.junjay</groupId>
  13. <artifactId>springcloud-provider-dept-8081</artifactId>
  14. <version>0.0.1-SNAPSHOT</version>
  15. <name>springcloud-provider-dept-8081</name>
  16. <url>http://maven.apache.org</url>
  17. <properties>
  18. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  19. </properties>
  20. <dependencies>
  21. <dependency>
  22. <groupId>junit</groupId>
  23. <artifactId>junit</artifactId>
  24. <scope>test</scope>
  25. </dependency>
  26. <!-- 我们需要拿到实体类,所以需要配置api-module -->
  27. <dependency>
  28. <groupId>com.junjay</groupId>
  29. <artifactId>springcloud-pai</artifactId>
  30. <version>0.0.1-SNAPSHOT</version>
  31. </dependency>
  32. <!-- 引用父工程中定义好的jar直接引用无需选择版本,因为在父工程中已经设置 -->
  33. <dependency>
  34. <groupId>junit</groupId>
  35. <artifactId>junit</artifactId>
  36. </dependency>
  37. <dependency>
  38. <groupId>mysql</groupId>
  39. <artifactId>mysql-connector-java</artifactId>
  40. </dependency>
  41. <dependency>
  42. <groupId>com.alibaba</groupId>
  43. <artifactId>druid</artifactId>
  44. </dependency>
  45. <dependency>
  46. <groupId>ch.qos.logback</groupId>
  47. <artifactId>logback-core</artifactId>
  48. </dependency>
  49. <dependency>
  50. <groupId>org.mybatis.spring.boot</groupId>
  51. <artifactId>mybatis-spring-boot-starter</artifactId>
  52. </dependency>
  53. <!-- test -->
  54. <dependency>
  55. <groupId>org.springframework.boot</groupId>
  56. <artifactId>spring-boot-test</artifactId>
  57. </dependency>
  58. <!-- web -->
  59. <dependency>
  60. <groupId>org.springframework.boot</groupId>
  61. <artifactId>spring-boot-starter-web</artifactId>
  62. </dependency>
  63. <!-- jetty 内置是tomcat 也可以使用jetty -->
  64. <dependency>
  65. <groupId>org.springframework.boot</groupId>
  66. <artifactId>spring-boot-starter-jetty</artifactId>
  67. </dependency>
  68. <!-- 热部署工具 -->
  69. <dependency>
  70. <groupId>org.springframework.boot</groupId>
  71. <artifactId>spring-boot-devtools</artifactId>
  72. </dependency>
  73. </dependencies>
  74. </project>

编写相关springboot的yml配置文件,配置服务端口,mybatis配置,数据库配置
image.png

  1. server:
  2. port: 8081
  3. #mybatis配置
  4. mybatis:
  5. type-aliases-package: org.springcloud.pojo
  6. config-location: classpath:mybatis/mybatis-config.xml
  7. mapper-locations: classpath:mybatis/mapper/*.xml
  8. #开启自动驼峰命名
  9. # configuration:
  10. # map-underscore-to-camel-case:
  11. #spring配置
  12. spring:
  13. application:
  14. name: springcloud-provider-dept
  15. datasource:
  16. # 数据库名称
  17. type: com.alibaba.druid.pool.DruidDataSource
  18. driver-class-name: com.mysql.cj.jdbc.Driver
  19. url: jdbc:mysql://localhost:3306/db01?useUncode=true&characterEncoding=utf8&verifyServerCertificate=false&useSSL=false&allowMultiQueries=true
  20. username: root
  21. password: root

撰写mybatis-config配置

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!-- 标识文件类型改文件为配置configuration DOCTYPE configuration-->
  3. <!DOCTYPE configuration
  4. PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  5. "http://mybatis.org/dtd/mybatis-3-config.dtd">
  6. <configuration>
  7. <settings>
  8. <!-- 全局性地开启或关闭所有映射器配置文件中已配置的任何缓存 开启二级缓存 -->
  9. <setting name="cacheEnabled" value="true" />
  10. </settings>
  11. </configuration>

创建controller,dao,service,mapper包以及文件
DeptMapper.xml

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!-- 标识文件类型改文件为mapper DOCTYPE mapper -->
  3. <!DOCTYPE mapper
  4. PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  5. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  6. <!-- namespace 绑定接口包路径 -->
  7. <mapper namespace="org.springcloud.dao.DeptDao">
  8. <insert id="addDept">
  9. INSERT INTO db01.dept( dname, db_source)
  10. VALUES
  11. (#{dname}, DATABASE())
  12. </insert>
  13. <select id="queryById" resultType="Dept" parameterType="Long">
  14. SELECT *
  15. FROM db01.dept where 1=1 deptno =#{deptno}
  16. </select>
  17. <select id="queryList" resultType="Dept">
  18. SELECT *
  19. FROM db01.dept
  20. where
  21. 1=1
  22. </select>
  23. </mapper>

DeptController

  1. package org.springcloud.controller;
  2. import java.util.List;
  3. import org.springcloud.pojo.Dept;
  4. import org.springcloud.service.DeptService;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.web.bind.annotation.GetMapping;
  7. import org.springframework.web.bind.annotation.PathVariable;
  8. import org.springframework.web.bind.annotation.PostMapping;
  9. import org.springframework.web.bind.annotation.RequestBody;
  10. import org.springframework.web.bind.annotation.RestController;
  11. /**
  12. * @author My 提供RestFul 风格服务
  13. */
  14. @RestController
  15. public class DeptController {
  16. @Autowired
  17. private DeptService deptService;
  18. @PostMapping("/dept/add")
  19. public boolean addDept(@RequestBody Dept dept) {
  20. return deptService.addDept(dept);
  21. }
  22. @GetMapping("/dept/queryById/{deptno}")
  23. public Dept queryById(@PathVariable("deptno") Long deptno) {
  24. return deptService.queryById(deptno);
  25. }
  26. @PostMapping("/dept/queryList")
  27. public List<Dept> queryList() {
  28. return deptService.queryList();
  29. }
  30. }

DeptDao

  1. package org.springcloud.dao;
  2. import java.util.List;
  3. import org.apache.ibatis.annotations.Mapper;
  4. //通过其他项目导入相关实体
  5. import org.springcloud.pojo.Dept;
  6. import org.springframework.stereotype.Repository;
  7. @Mapper
  8. @Repository
  9. public interface DeptDao {
  10. public boolean addDept(Dept dept);
  11. public Dept queryById(Long deptno);
  12. public List<Dept> queryList();
  13. }

DeptService

  1. package org.springcloud.service;
  2. import java.util.List;
  3. //通过其他项目导入相关实体
  4. import org.springcloud.pojo.Dept;
  5. public interface DeptService {
  6. public boolean addDept(Dept dept);
  7. public Dept queryById(Long deptno);
  8. public List<Dept> queryList();
  9. }

DeptServiceImpl

  1. package org.springcloud.service;
  2. import java.util.List;
  3. import org.springcloud.dao.DeptDao;
  4. import org.springcloud.pojo.Dept;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.stereotype.Service;
  7. @Service
  8. public class DeptServiceImpl implements DeptService {
  9. @Autowired
  10. private DeptDao deptDao;
  11. public boolean addDept(Dept dept) {
  12. return deptDao.addDept(dept);
  13. }
  14. public Dept queryById(Long deptno) {
  15. return deptDao.queryById(deptno);
  16. }
  17. public List<Dept> queryList() {
  18. return deptDao.queryList();
  19. }
  20. }

创建boot启动类
添加 @SpringBootApplication 注解,以main方法 用SpringApplication 点run 启动本类
DeptProvider_8081

  1. package org.springcloud;
  2. import org.springframework.boot.SpringApplication;
  3. import org.springframework.boot.autoconfigure.SpringBootApplication;
  4. // 启动类
  5. @SpringBootApplication
  6. public class DeptProvider_8081 {
  7. public static void main(String[] args) {
  8. SpringApplication.run(DeptProvider_8081.class, args);
  9. }
  10. }

启动问题
解决方案https://blog.csdn.net/qq_34322008/article/details/89954934
image.png
错误原因:resources 配置文件包名 写错成 resoures 导致没有加载到yml配置文件,再次加深springboot 约定大于配置
image.png
启动成功
image.png
以RestFul 风格访问,访问成功
image.png
根据id 查询 dept表数据
image.png
测试添加用户,提示不能使用GET请求因为后端RestFul请求为POST请求,为了服务安全
image.png
通过postman以post请求测试用户添加
image.png
image.png
服务提供者创建创建完成

6:创建服务消费者子工程

以之前创建子工程相似
image.png
创建消费者工程后 ,修改pom文件

  1. <?xml version="1.0"?>
  2. <project
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"
  4. xmlns="http://maven.apache.org/POM/4.0.0"
  5. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  6. <modelVersion>4.0.0</modelVersion>
  7. <parent>
  8. <groupId>com.junjay</groupId>
  9. <artifactId>SpringCloud</artifactId>
  10. <version>0.0.1-SNAPSHOT</version>
  11. </parent>
  12. <groupId>com.junjay</groupId>
  13. <artifactId>springcloud-consumer-dept-8082</artifactId>
  14. <version>0.0.1-SNAPSHOT</version>
  15. <name>springcloud-consumer-dept-8082</name>
  16. <url>http://maven.apache.org</url>
  17. <properties>
  18. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  19. </properties>
  20. <dependencies>
  21. <dependency>
  22. <groupId>junit</groupId>
  23. <artifactId>junit</artifactId>
  24. <scope>test</scope>
  25. </dependency>
  26. <!-- 消费者只需要实体类+web -->
  27. <dependency>
  28. <groupId>com.junjay</groupId>
  29. <artifactId>springcloud-pai</artifactId>
  30. <version>0.0.1-SNAPSHOT</version>
  31. </dependency>
  32. <dependency>
  33. <groupId>org.springframework.boot</groupId>
  34. <artifactId>spring-boot-starter-web</artifactId>
  35. </dependency>
  36. <!-- 热部署工具 -->
  37. <dependency>
  38. <groupId>org.springframework.boot</groupId>
  39. <artifactId>spring-boot-devtools</artifactId>
  40. </dependency>
  41. </dependencies>
  42. </project>

创建对应消费者的yml 配置文件

image.png

  1. #服务消费者只需要配置启动端口
  2. server:
  3. port: 8082

restful 风格 肯定有Rest TempLate Rest模板
image.png
image.png
配置RestTemplate bean
image.png
image.png
配置RestTemplate bean

  1. package org.springcloud.config;
  2. import org.springframework.context.annotation.Bean;
  3. import org.springframework.context.annotation.Configuration;
  4. import org.springframework.web.client.RestTemplate;
  5. // 相当于spring 中的 applicationContext.xml
  6. //指示一个类声明一个或多个@Bean方法,并且可以由Spring容器处理,以便在运行时为这些bean生成BeanDefinition和服务请求
  7. @Configuration
  8. public class ConfigBean {
  9. // 原来是<bean></bean>
  10. // 现在使用spring注解
  11. /**
  12. * RestTemplate中没有@Bean,容器中没有该类,需要new一个新类,
  13. * 所以需要手动配置一个bean,这样容器中就有改类,就可以使用@Autowired进行注入
  14. * 也就是说通过@Bean 将该类交给spring进行管理及ioc
  15. */
  16. @Bean
  17. public RestTemplate getRestTemplate() {
  18. return new RestTemplate();
  19. }
  20. }

消费者controller

  1. package org.springcloud.controller;
  2. import java.util.List;
  3. import org.springcloud.pojo.Dept;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.web.bind.annotation.PathVariable;
  6. import org.springframework.web.bind.annotation.RequestMapping;
  7. import org.springframework.web.bind.annotation.RestController;
  8. import org.springframework.web.client.RestTemplate;
  9. @RestController
  10. public class DeptConsumerController {
  11. // 在这边没有service接口,
  12. // 理解:消费者 应不应该有service 结果是不需要执行访问就好
  13. // 因为需要restful 风格 肯定有RestTempLate spring会提供模板,供我们调用使用
  14. /**
  15. * 注入RestTemplate bean 参数 url,request请求:一般用map,class<T>,
  16. */
  17. @Autowired
  18. private RestTemplate restTemplate;// 提供多种便捷访问远程http服务的方法,简单的restful服务模板
  19. private static final String REST_URL = "http://localhost:8081";
  20. // @Override
  21. // @Nullable
  22. // public URI postForLocation(String url, @Nullable Object request, Map<String, ?> uriVariables)
  23. // throws RestClientException {
  24. // RequestCallback requestCallback = httpEntityCallback(request);
  25. // HttpHeaders headers = execute(url, HttpMethod.POST, requestCallback, headersExtractor(), uriVariables);
  26. // return (headers != null ? headers.getLocation() : null);
  27. // }
  28. // 将请求和处理请求的控制器方法关联起来,建立映射关系
  29. // 标识类:设置映射请求的请求路径的初试信息
  30. // 表示方法:设置映射请求的请求路径的具体信息
  31. @RequestMapping("/consumer/dept/get/{id}")
  32. public Dept get(@PathVariable("id") Long id) {
  33. // 服务消费者需要调用返回但是没有service 所以需要一个访问地址
  34. // 如:http://localhost:8081/dept/queryById/1
  35. return restTemplate.getForObject(REST_URL + "/dept/get/" + id, Dept.class);
  36. }
  37. @RequestMapping("/consumer/dept/add")
  38. public Boolean add(Dept dept) {
  39. return restTemplate.postForObject(REST_URL + "/dept/add/", dept, Boolean.class);
  40. }
  41. @RequestMapping("/consumer/dept/list")
  42. public List<Dept> list() {
  43. return restTemplate.getForObject(REST_URL + "/dept/queryList", List.class);
  44. }
  45. }

7:测试消费者服务调用提供者

http://localhost:8081/ 服务提供者
http://localhost:8082/ 服务消费者

http://localhost:8082/consumer/dept/get/1 通过服务消费者调用服务提供者
消费者内部实现 url 访问服务提供者 http://localhost:8082/consumer/dept/get/1
image.png
image.png
image.png
数据库得到dname为空
查询问题,消费服务端没有问题,查看消费提供者
image.png
image.png
提供者addDept 参数添加 @RequestBody 注解后提供者拿到对应值
@RequestBody主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数据的);而最常用的使用请求体传参的无疑是POST请求了,所以使用@RequestBody接收数据时,一般都用POST方式进行提交。在后端的同一个接收方法里,@RequestBody与@RequestParam()可以同时使用,@RequestBody最多只能有一个,而@RequestParam()可以有多个
[

](https://blog.csdn.net/justry_deng/article/details/80972817)
image.png
image.png