1.建cloud-consumer-order80
2.改pom
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.atguigu.springcloud</groupId>
<artifactId>cloud2022</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>cloud-consumer-order80</artifactId>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<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>
</project>
3.写yml
server:
port: 80
4.主启动
package com.atguigu.springcloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* 简要描述
*
* @Author: ASuLe
* @Date: 2023/1/11 20:17
* @Version: 1.0
* @Description: 文件作用详细描述....
*/
@SpringBootApplication
public class OrderMain80 {
public static void main(String[] args) {
SpringApplication.run(OrderMain80.class,args);
}
}
5.业务类
问题1: 客户端是否需要controller层、service层、dao层吗?
回答: 不需要,只需要controller。
原因: 消费者调用8001提供者,提供服务的是8001,类似于同学不懂Java才找老师学习Java,这里老师就是教学服务的提供者,所以只应该有个controller,至于service和dao,不可能,因为你不可能操作提供者的数据库。
问题2: 但是order80和payment8001是不同的服务,该怎么调用呢?
解决1: 最原始web阶段使用HttpClient
解决2: 现在用restTemplate
5.1entities
主实体类Payment,Json封装体CommonResult类可直接复制
5.2RestTemplate
RestTemplate是什么
RestTemplate提供了多种便捷访问远程Http服务的方法,是一种简单便捷的restful服务模板类,是Spring提供的用于访问Rest服务的客户端模板工具集
RestTemplate官网及使用
RestTemplate官网地址
使用:
使用RestTemplate非常简单
- url:REST请求地址
- requestMap:请求参数
- ResponseBean.class:HTTP响应转换被转换成的对象类型
5.3config配置类
位置
package com.atguigu.springcloud.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
/**
* 简要描述
*
* @Author: ASuLe
* @Date: 2023/1/11 20:34
* @Version: 1.0
* @Description: 文件作用详细描述....
*/
@Configuration
public class ApplicationContextConfig {
//@Bean相当于applicationContext.xml <bean id="" class=""/>
@Bean
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}
5.4controller
package com.atguigu.springcloud.controller;
import com.atguigu.springcloud.entities.CommonResult;
import com.atguigu.springcloud.entities.Payment;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import javax.annotation.Resource;
/**
* 简要描述
*
* @Author: ASuLe
* @Date: 2023/1/11 20:23
* @Version: 1.0
* @Description: 文件作用详细描述....
*/
@RestController
@Slf4j
public class OrderController {
public static final String PAYMENT_URL = "http://localhost:8001";
@Resource
private RestTemplate restTemplate;
//这里是客户端都是发送GetMapping请求
@GetMapping("/consumer/payment/create")
public CommonResult<Payment> 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);
}
}
service服务控制台
6.测试
6.1测试查询
查询成功
6.2测试插入
看似插入成功,真的是这样吗?
如下图所示,插入的数据有主键,但是无内容
不要忘记@RequestBody注解
再次尝试插入
数据库中含有数据,插入成功