SpringCloud_Feign和RestTemplate和Restful
SpingCloud中使用RESTful风格编程有何作用?
简而言之,使用RESTful风格编程可以通过选择不同的请求发送方式(Get、Post、Put、Delete),来代替书写不同的访问路径,较为简洁
一.创建服务提供者Provider
1.导入依赖
-
<!--引用SpringCloud-API模块-->
-
<!--Dept实体类所在模块-->
-
<dependency>
-
<groupId>org.example</groupId>
-
<artifactId>SpringCloud-API</artifactId>
-
<version>1.0-SNAPSHOT</version>
-
</dependency>
-
<!--spring boot web依赖-->
-
<dependency>
-
<groupId>org.springframework.boot</groupId>
-
<artifactId>spring-boot-starter-web</artifactId>
-
<version>2.6.7</version>
-
</dependency>
-
<!--mysql及mybatis依赖-->
-
<dependency>
-
<groupId>mysql</groupId>
-
<artifactId>mysql-connector-java</artifactId>
-
</dependency>
-
<dependency>
-
<groupId>org.mybatis.spring.boot</groupId>
-
<artifactId>mybatis-spring-boot-starter</artifactId>
-
</dependency>
-
<!--热部署依赖-->
-
<dependency>
-
<groupId>org.springframework.boot</groupId>
-
<artifactId>spring-boot-devtools</artifactId>
-
<version>2.6.7</version>
-
</dependency>
2.编写主启动类
注:记得添加@SpringBootApplication注解
-
-
public class DeptProvider_8001 {
-
public static void main(String[] args) {
-
SpringApplication.run(DeptProvider_8001.class,args);
-
}
-
}
3.编写DAO层
注:记得添加@Mapper注解
-
-
public interface DeptMapper {
-
Dept queryByDeptNo(Long deptno);
-
-
List<Dept> queryAll();
-
-
boolean addDept(Dept dept);
-
-
boolean updateDept(Dept dept);
-
-
boolean deleteDept(Long deptno);
-
}
4.编写Server层
-
public interface DeptService {
-
Dept queryByDeptNo(Long deptno);
-
-
List<Dept> queryAll();
-
-
boolean addDept(Dept dept);
-
-
boolean updateDept(Dept dept);
-
-
boolean deleteDept(Long deptno);
-
}
注:实现类上记得添加@Service注解
-
-
public class DeptServiceImpl implements DeptService{
-
-
DeptMapper deptMapper;
-
-
-
public Dept queryByDeptNo(Long deptno) {
-
return deptMapper.queryByDeptNo(deptno);
-
}
-
-
-
public List<Dept> queryAll() {
-
return deptMapper.queryAll();
-
}
-
-
-
public boolean addDept(Dept dept) {
-
return deptMapper.addDept(dept);
-
}
-
-
-
public boolean updateDept(Dept dept) {
-
return deptMapper.updateDept(dept);
-
}
-
-
-
public boolean deleteDept(Long deptno) {
-
return deptMapper.deleteDept(deptno);
-
}
-
}
5.编写Controller层
GetMapping用于查询、PostMapping用于添加、PutMapping用于修改、DeleteMapping用于删除
RestController为Controller与ResponseBody的合成注解(标记Controller组件及使请求方法返回Json数据)
-
-
-
public class DeptController {
-
//自动写入实现类
-
DeptServiceImpl deptServiceImpl;
-
-
-
public Dept queryByDeptNo( { Long deptno)
-
return deptServiceImpl.queryByDeptNo(deptno);
-
}
-
-
-
public List<Dept> queryAll() {
-
return deptServiceImpl.queryAll();
-
}
-
-
-
public boolean addDept(Dept dept) {
-
return deptServiceImpl.addDept(dept);
-
}
-
-
-
public boolean update(Dept dept){
-
return deptServiceImpl.updateDept(dept);
-
}
-
-
-
public boolean deleteDept({ Long deptno)
-
return deptServiceImpl.deleteDept(deptno);
-
}
-
-
}
6.编写Mapper文件
-
-
-
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-
<mapper namespace="cn.alan.springcloud.DAO.DeptMapper">
-
<select id="queryByDeptNo" parameterType="Long" resultType="Dept">
-
select *
-
from mybatis.dept
-
where deptno = #{deptno};
-
</select>
-
-
<select id="queryAll" resultType="Dept">
-
select *
-
from mybatis.dept;
-
</select>
-
-
<insert id="addDept" parameterType="Dept">
-
insert into mybatis.dept (dname, db_source)
-
VALUES (#{dname}, DATABASE());
-
</insert>
-
-
<update id="updateDept" parameterType="Dept">
-
update mybatis.dept
-
set dname = #{dname},
-
db_source = DATABASE()
-
where deptno = #{deptno};
-
</update>
-
-
<delete id="deleteDept" parameterType="Long">
-
delete
-
from mybatis.dept
-
where deptno = #{deptno}
-
</delete>
-
</mapper>
07.配置yml文件
-
server:
-
port: 8001
-
-
spring:
-
application:
-
name: springcloud-provider-dept
-
datasource:
-
driver-class-name: com.mysql.cj.jdbc.Driver
-
url: jdbc:mysql://localhost:3306/mybatis?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
-
username: 数据库用户名
-
password: 数据库密码
-
-
mybatis:
-
mapper-locations: classpath:mybatis/mapper/*.xml #mapper文件路径
-
type-aliases-package: cn.alan.springcloud.POJO #实体类别名(使得mapper文件中不用写全限定名)
二.创建服务消费者Consumer
基于Feign
1.导入依赖
-
<!--实体类所在模块-->
-
<dependency>
-
<groupId>org.example</groupId>
-
<artifactId>SpringCloud-API</artifactId>
-
<version>1.0-SNAPSHOT</version>
-
</dependency>
-
<!--web依赖-->
-
<dependency>
-
<groupId>org.springframework.boot</groupId>
-
<artifactId>spring-boot-starter-web</artifactId>
-
<version>2.6.7</version>
-
</dependency>
-
<!--热部署-->
-
<dependency>
-
<groupId>org.springframework.boot</groupId>
-
<artifactId>spring-boot-devtools</artifactId>
-
<version>2.6.7</version>
-
</dependency>
-
<!--feign依赖-->
-
<dependency>
-
<groupId>org.springframework.cloud</groupId>
-
<artifactId>spring-cloud-starter-openfeign</artifactId>
-
<version>3.1.2</version>
-
</dependency>
2.编写主启动类
注:记得添加@EnableFeignClients注解用于开启Feign
-
-
//开启Feign
-
public class DpetConsumer_80_Feign {
-
public static void main(String[] args) {
-
SpringApplication.run(DpetConsumer_80_Feign.class);
-
}
-
}
3.编写FeignClient
注:记得添加@Component注解(将FeignDeptClient类交给Spring管理)与@FeignClient注解
注:若使用了eureka注册中心,则name属性填写服务名,url无需填写
-
-
-
public interface FeignDeptClient {
-
-
Dept queryByDeptNo(; Long deptno)
-
-
-
List<Dept> queryAll();
-
-
-
boolean addDept(Dept dept);
-
-
-
boolean updateDept(Dept dept);
-
-
-
boolean deleteDept(; Long deptno)
-
}
4.编写Controller层
-
-
-
public class DeptConsumerController {
-
//自动写入FeignClient(FeignDeptClient类)
-
FeignDeptClient feignDeptClient;
-
-
-
Dept queryByDeptNo( { Long deptno)
-
return feignDeptClient.queryByDeptNo(deptno);
-
}
-
-
-
List<Dept> queryAll(){
-
return feignDeptClient.queryAll();
-
}
-
-
-
public boolean addDept(Dept dept) {
-
return feignDeptClient.addDept(dept);
-
}
-
-
-
public boolean update(Dept dept){
-
return feignDeptClient.updateDept(dept);
-
}
-
-
-
public boolean deleteDept({ Long deptno)
-
return feignDeptClient.deleteDept(deptno);
-
}
-
}
5.配置yml文件
-
server:
-
port: 80
基于RestTemplate
1.添加依赖
-
<!--实体类所在模块-->
-
<dependency>
-
<groupId>org.example</groupId>
-
<artifactId>SpringCloud-API</artifactId>
-
<version>1.0-SNAPSHOT</version>
-
</dependency>
-
<!--web依赖-->
-
<dependency>
-
<groupId>org.springframework.boot</groupId>
-
<artifactId>spring-boot-starter-web</artifactId>
-
<version>2.6.7</version>
-
</dependency>
-
<!--热部署依赖-->
-
<dependency>
-
<groupId>org.springframework.boot</groupId>
-
<artifactId>spring-boot-devtools</artifactId>
-
<version>2.6.7</version>
-
</dependency>
2.编写主启动类
注:记得添加@SpringBootApplication注解
-
-
public class DeptConsumer_80 {
-
public static void main(String[] args) {
-
SpringApplication.run(DeptConsumer_80.class,args);
-
}
-
}
3.编写RestTemplate配置类
注:记得在类上方添加@Configuration注解,方法上方添加@Bean注解
-
-
public class RestTemplateConfig {
-
-
public RestTemplate restTemplate() {
-
return new RestTemplate();
-
}
-
}
4.编写Controller层
-
//Controller和ResponseBody融合注解 向spring标注当前类为controller
-
-
public class DeptConsumerController {
-
-
RestTemplate restTemplate;//基于http通信 通过RestTemplate调用provider接口
-
-
//不使用eureka时 使用服务端口进行调用
-
private static final String REST_URL_PREFIX = "http://localhost:8001/Dept/";
-
-
-
public Dept queryByDeptNo( { Long deptno)
-
//参数:url 返回值类型
-
return restTemplate.getForObject(REST_URL_PREFIX deptno, Dept.class);
-
}
-
-
-
public List<Dept> queryAll() {
-
return restTemplate.getForObject(REST_URL_PREFIX, List.class);//注意此处类型为List 区别于mapper.xml中填写List的泛型的类型
-
}
-
-
-
public boolean addDept(Dept dept) {
-
//参数:url 传递的参数 返回值类型
-
return restTemplate.postForObject(REST_URL_PREFIX, dept, Boolean.class);
-
}
5.配置yml文件
-
server:
-
port: 80
运行效果
运行Provider与Consumer的主启动类,借助swagger、postman等工具,选择请求发送的方式即可查看运行效果
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgeihck
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01