Version: Next
订单模块构建
新建 module ,命名为
cloud-consumer-order80
pom.xml
- 不需要持久层相关的模块,如 jdbc、druid、mybatis
pom.xml<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--监控--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><!--热部署--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies>
application.yaml
- 面向用户,一般使用
80
端口application.yamlserver:port: 80
主启动
@SpringBootApplicationpublic class OrderMain80 {public static void main(String[] args) {SpringApplication.run(OrderMain80.class, args);}}
业务类
实体类:偷懒直接复制之前 entities 下的两个类
Controller
- 要实现 订单模块 对 支付模块 的调用
- 可以使用
Http Client
,此处使用RestTemplate
,它是对前者的封装RestTemplate
- 提供了多种边界访问远程 Http 服务的方法
- 是一种简单便捷的访问 restful 服务的模板类,是 Spring 提供的用于访问 Rest 服务的
客户端模板工具集
- 使用 RestTemplate 访问 restful 接口非常简单粗暴
参数 意义 url
REST 请求地址 requestMap
请求参数 ResponseBean.class
HTTP 响应转换成的对象 SpringBoot 使用 RestTemplate
- 使用配置类注入 Bean
- 新建
config.ApplicationContextConfig
类spring配置类@Configurationpublic class ApplicationContextConfig {@Beanpublic RestTemplate getRestTemplate() {return new RestTemplate();}}
- 编写
OrderController
使用restTemplate.postForObject(..)
方法发送 POST 请求,.getForObject()
方法发送 GET 请求,分别调用 支付模块 的两个 Controller 方法订单模块 Controller@RestController@Slf4jpublic class OrderController {private static final String PAYMENT_URL = "http://localhost:8081";@Resourceprivate RestTemplate restTemplate;/*** 调用 支付模块 的 create 方法** @param payment* @return 调用结果*/@GetMapping("/consumer/payment/create")public CommonResult<Integer> create(Payment payment) {return restTemplate.postForObject(PAYMENT_URL + "/payment/create",payment,CommonResult.class);}@GetMapping("/consumer/payment/get/{id}")public CommonResult<Payment> getPayment(@PathVariable("id") Long id) {return restTemplate.getForObject(PAYMENT_URL + "/payment/get/" + id,CommonResult.class);}}
测试
启动两个 Spring Boot 项目
通过 POSTMAN 访问
http://127.0.0.1:80/consumer/payment/get/2
响应{"code": 200,"message": "查询成功","data": {"id": 2,"serial": "长大002"}}通过 POSTMAN 访问
http://127.0.0.1:80/consumer/payment/create?serial=长达003
响应{"code": 200,"message": "插入成功","data": 1}
可见 order80
模块成功调用了 payment8001
模块