当前位置: 首页 > news >正文

芋道源码yudao-cloud 二开笔记(Feign服务调用,如何定义一个 API 接口)

在yudao-cloud如何定义一个Api接口,提供给另一个服务去调用?下面是 yudao-module-syetem系统服务 调用 yudao-module-infra文件服务的示例:

在这里插入图片描述
首先需要在服务提供者yudao-module-infra定义好对应的api,

第1步:
cn.iocoder.yudao.module.infra.enums.ApiConstants查看该文件是否已创建,如下:

在这里插入图片描述
第2步:
定义接口和对应的实现类cn.iocoder.yudao.module.infra.api.file.FileApi,如下:

在这里插入图片描述

代码示例

// Feign接口
@FeignClient(name = ApiConstants.NAME)
@Tag(name = "RPC 服务 - 文件")
public interface FileApi {@PostMapping(PREFIX + "/create")@Operation(summary = "保存文件,并返回文件的访问路径")CommonResult<String> createFile(@Valid @RequestBody FileCreateReqDTO createReqDTO);}// 实现
@RestController // 提供 RESTful API 接口,给 Feign 调用
@Validated
public class FileApiImpl implements FileApi {@Resourceprivate FileService fileService;@Overridepublic CommonResult<String> createFile(FileCreateReqDTO createReqDTO) {// 实现类直接调用文件service类return success(fileService.createFile(createReqDTO.getName(), createReqDTO.getPath(),createReqDTO.getContent()));}}

第3步:
cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants定义异常信息,普通的异常处理也可以定义在这里,如下图:

在这里插入图片描述
第4步:
service类使用判断抛出异常,如下:

if(content == null){throw exception(FILE_NOT_EXISTS);
}

在这里插入图片描述

第5步:
服务消费者yudao-module-system引入依赖,已经引入的不需要再添加。代码如下:

<dependency><groupId>cn.iocoder.cloud</groupId><artifactId>yudao-module-infra-api</artifactId><version>${revision}</version>
</dependency>

第6步:
yudao-module-system-biz 模块,创建 RpcConfiguration (opens new window)配置类,注入 FileApi 接口,已经创建的不需要再创建。代码如下:

@Configuration(proxyBeanMethods = false)
@EnableFeignClients(clients = {FileApi.class}) // 如有多个可用,隔开添加 {FileApi.class,xxx.class}
public class RpcConfiguration {}

第7步:
在需要使用到的地方,引入调用即可:

@Service
public class AdminUserServiceImpl implements AdminUserService {@Resourceprivate AdminUserApi adminUserApi;@Overridepublic void updateUserAvatar(Long id, InputStream avatarFile) {// ... 省略非关键代码String avatar = fileApi.createFile(IoUtil.readBytes(avatarFile));}
}

第8步:
嗯!!!!!不用写了,完成,重启测试。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 信息学奥赛初赛天天练-52-CSP-J2019基础题3-抽屉原理、鸽巢原理、乘法原理、二叉树遍历、前序遍历、中序遍历、后序遍历
  • 下属“软对抗”,工作阳奉阴违怎么办?4大权谋术,让他不敢造次
  • 复制列表(切片复制)
  • 前端:Vue学习 - 智慧商城项目
  • 数值分析——分段低次插值
  • 怎么给USER新增表空间文件
  • c语言指针中“数组名的理解”以及“一维数组传参”的本质
  • 攻击服务器100G流量多少钱?攻击服务器1小时价格多少?
  • 使用RabbitMQ在Spring Boot入门实现简单的消息的发送与接收
  • TwinCAT3 新建项目教程
  • 8.Redis的List类型
  • 说说什么是变频空调及其工作原理
  • 软测面试二十问(最新面试)
  • 报表系统之Cube.js
  • 【mongodb】mongodb数据备份与恢复
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • 2017-08-04 前端日报
  • ECS应用管理最佳实践
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • Java多线程(4):使用线程池执行定时任务
  • java架构面试锦集:开源框架+并发+数据结构+大企必备面试题
  • JS进阶 - JS 、JS-Web-API与DOM、BOM
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • Redis在Web项目中的应用与实践
  • 当SetTimeout遇到了字符串
  • 动态魔术使用DBMS_SQL
  • 对JS继承的一点思考
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 技术:超级实用的电脑小技巧
  • 数据科学 第 3 章 11 字符串处理
  • 微信开放平台全网发布【失败】的几点排查方法
  • 关于Kubernetes Dashboard漏洞CVE-2018-18264的修复公告
  • 京东物流联手山西图灵打造智能供应链,让阅读更有趣 ...
  • ​【数据结构与算法】冒泡排序:简单易懂的排序算法解析
  • ​DB-Engines 12月数据库排名: PostgreSQL有望获得「2020年度数据库」荣誉?
  • ​HTTP与HTTPS:网络通信的安全卫士
  • ​一些不规范的GTID使用场景
  • #我与Java虚拟机的故事#连载16:打开Java世界大门的钥匙
  • $.type 怎么精确判断对象类型的 --(源码学习2)
  • (a /b)*c的值
  • (Bean工厂的后处理器入门)学习Spring的第七天
  • (day18) leetcode 204.计数质数
  • (Java岗)秋招打卡!一本学历拿下美团、阿里、快手、米哈游offer
  • (二)linux使用docker容器运行mysql
  • (考研湖科大教书匠计算机网络)第一章概述-第五节1:计算机网络体系结构之分层思想和举例
  • (每日一问)基础知识:堆与栈的区别
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • (一)u-boot-nand.bin的下载
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • (转贴)用VML开发工作流设计器 UCML.NET工作流管理系统
  • ******之网络***——物理***
  • ***检测工具之RKHunter AIDE
  • .net core 调用c dll_用C++生成一个简单的DLL文件VS2008
  • .net framework 4.0中如何 输出 form 的name属性。
  • .NET 材料检测系统崩溃分析