需求6:如何写一个后端接口?
这两天一直在对之前做的工作做梳理总结,不过前两天我都是在总结一些bug的问题。尽管有些bug问题我还没写文章,但是,我今天不得不先停下对bug的总结了。因为在国庆之后,我需要自己开发一个IT资产管理的功能,这个功能需要你写大量的接口。所以今天,我就把过去这几个月写的几个接口拿来复习一下,为之后写更难的接口做准备。
了解需求
看这个问题:左图的干系人那块地方不知道为什么出现这些数据。我们希望达到右图这种效果,就是干系人那块地方显示这个设备关联的所有干系人,然后每个干系人都可以显示这个干系人下所有的用户。


大纲思路
把需求捋清楚,知道要干什么了之后,就想想大致的思路怎么写。我们需要写一个接口,这个接口的返回数据是:返回所有干系人以及干系人下的所有用户。返回值是这个样子的:
[{"name": "生产部经理","list": [{"name": "张三","mobile": 123456789877},{"name": "李四","mobile": 123456789877},{"name": "王五","mobile": 123456789877}]},{"name": "工序段段长","list": [{"name": "陈六","mobile": 123456789877},{"name": "黄七","mobile": 123456789877},]}
]
只要后端传回来这些数据,前端就可以用这些数据来做展示,呈现在页面上。
后端代码编写
写返回值


这个时候,一个接口的返回值就已经装饰好了,接下来就是修改内部了。
写controller层
在修改内部之前,我们首先要知道这个接口的逻辑是什么?逻辑是:通过设备ID找到关联这个设备的所有干系人,再从每个干系人找到关联这个干系人的所有用户。
“通过设备ID找到关联这个设备的所有干系人”的代码其他接口已经写了:

接下来写“从每个干系人找到关联这个干系人的所有用户”:

最后的效果:

总结一下这个代码的意思:
//通过设备ID找到关联这个设备的所有干系人
List<RoleInfoDTO> result = deviceStakeholderService.getDeviceStakeholderOption(deviceId);
在小程序故障上报的地方,你选了设备,干系人数据就直接出来了。证明什么?证明通过设备才能找到干系人用户。这就是第一行代码的意思。传入了deviceId,返回RoleInfoDTO(里面是所有干系人的信息,比如说有3个干系人,就返回3个干系人的所有信息)。
List<StackholderUsersInfoVO> list = new ArrayList<>();
自己创建一个list对象,这个list对象是真正的返回给前端的对象,这个对象的类型是StackholderUsersInfoVO。
@Data
@ApiModel("干系人角色的信息")
public class StackholderUsersInfoVO {@ApiModelProperty("干系人角色名")private String name;@ApiModelProperty("干系人角色下的每个用户的信息")private List<UserInfoVo> list;
}
接下来,我们的任务就很明确了:你写的代码是关于如何找到干系人角色名(name),以及干系人角色下的每个用户的信息(list)。往后你的每一段代码,目标都是关于拿到name和拿到list,最后return list就好了。
name和list从哪里拿到呢?肯定是从result对象里拿。你第一行代码已经拿到了所有干系人的信息了,然后放到result对象里。下一步就是操作这个result对象,拿到这个对象的干系人角色名以及每个干系人的所有角色。那就写吧:
//遍历result中的每个干系人
for(RoleInfoDTO roleInfoDTO : result) {//创建一个对象a,对象a是StackholderUsersInfoVO类型的,我们希望把从result对象中查出来的数据放到对象a中,所以要创建一个对象aStackholderUsersInfoVO a = new StackholderUsersInfoVO();//把result对象中的干系人角色名拿出来放到对象a中a.setName(roleInfoDTO.getRoleName());
//通过干系人ID找到干系人下的所有用户,用户的信息放到userList对象中List<UserInfoVo> userList = iUserInfoService.getUserInfo(roleInfoDTO.getId());//把userList对象放到对象a中a.setList(userList);
//把对象a放到对象list中list.add(a);}
已经大功告成了,最后把list对象返回就好了:
return Result.success(list);
其实你把controller层写好后,你发现service层,mapper层,sql语句都写好了。为什么?因为我是复制粘贴代码过来的,当时写这些代码的人早已经把service层,mapper层,sql语句都写好了,我只要复制一个controller层,相当于变相把其他的这些都复制过来了。
接下来,可以用postman测试一下,看看这个接口是否返回了我们想返回的参数:

用postman测试知道已经返回成功了,证明这个接口后端已经写完了。
进去小程序看看这个接口在不在:

发现还是不在。为什么呢?Postman明明已经试过这个接口已经在,而且返回的参数值确实是我们想要的,但是为什么在小程序就不在呢?
因为我们还没有配置连接到后端的接口的小程序代码,先配置一下:

然后再去看看小程序端的接口那里有没有显示出来我们写的这个接口:

OK,已经看到了,正是我们想要的,因此后端已经完成了。
前端代码编写




总结
今天我们讨论了如何编写接口。其实,在这几个月的实践中,我逐渐领悟到了一些关键点。
当你需要编写一个接口时,最重要的部分并不是代码的具体实现,代码的细节等,而是你需要彻底理解这个接口的每一层逻辑。也就是说,你需要非常熟悉Controller层、Service层和Mapper层每层都要干嘛。
只要你对接口每一层的功能和逻辑了然于心,你就可以将你的思路和想法传达给AI,让AI来帮助你写。坦白讲,其实你自己写的不一定有AI写的漂亮。
就以这个接口为例子:

你把你的这个思路给AI,AI帮你写。当然,AI生成的代码肯定和我们最终的代码还是差一点的,这时候你需要做的就是理解AI的代码逻辑,并进行必要的修改。即使你不擅长写代码,但只要你能看懂并修改代码就可以了。不然的话,如果连修改代码都不会,那还不如转行算了!
所以,我的工作重点在于理清接口每一层的逻辑,然后将这些逻辑告诉AI,让AI来生成代码。在AI生成代码后,我再根据实际需求进行调整。如果遇到实在解决不了的问题,就去找睿哥,让他帮我修改就好了。
相关文章:
需求6:如何写一个后端接口?
这两天一直在对之前做的工作做梳理总结,不过前两天我都是在总结一些bug的问题。尽管有些bug问题我还没写文章,但是,我今天不得不先停下对bug的总结了。因为在国庆之后,我需要自己开发一个IT资产管理的功能,这个功能需要…...
《Linux从小白到高手》理论篇(五):文件权限控制及文件操作相关的命令
本篇介绍Linux文件权限控制及文件操作相关的命令,看完本文,有关Linux文件权限控制及文件操作相关的常用命令你就掌握了99%了。 文件权限 在介绍文件权限之前先来复习下Linux的文件类型,始终记住那句话:Linux系统下,一…...
异常场景分析
优质博文:IT-BLOG-CN 为了防止黑客从前台异常信息,对系统进行攻击。同时,为了提高用户体验,我们都会都抛出的异常进行拦截处理。 一、异常处理类 Java把异常当做是破坏正常流程的一个事件,当事件发生后,…...
Leetcode: 0001-0010题速览
Leetcode: 0001-0010题速览 本文材料来自于LeetCode solutions in any programming language | 多种编程语言实现 LeetCode、《剑指 Offer(第 2 版)》、《程序员面试金典(第 6 版)》题解 遵从开源协议为知识共享 版权归属-相同方式…...
计算机的错误计算(一百一十二)
摘要 计算机的错误计算(六十三)与(六十八)以及(六十九)分别探讨了大数与 附近数以及 附近数 的余切函数的计算精度问题。本节讨论余切序列(即迭代 )的计算精度问题。 余切序列是指…...
C++基础(7)——STL简介及string类
目录 1.STL简介 1.1什么是 1.2STL的历史版本 1.3STL的六大组件 编辑 1.4有用的网址 2.string类 2.1string的多种定义方式 2.2string的插入 2.2.1尾插(push_back) 2.2.2insert插入 2.3拼接(append) 2.4删除 2.4.1尾…...
配置Nginx以支持通过HTTPS回源到CDN
要配置Nginx以支持通过HTTPS回源到CDN,你需要确保Nginx已正确配置SSL,并且能够处理来自CDN的HTTPS请求。以下是一个简化的Nginx配置示例,它配置了SSL并设置了代理服务器参数以回源到CDN: server {listen 443 ssl;server_name you…...
yolov10+strongsort的目标跟踪实现
此次yolov10deepsort不论是准确率还是稳定性,再次超越了之前的yolodeepsort系列。 yolov10介绍——实时端到端物体检测 YOLOv10 是清华大学研究人员在 UltralyticsPython 清华大学的研究人员在 YOLOv10软件包的基础上,引入了一种新的实时目标检测…...
C# 字符与字符串
本课要点: 1、字符类Char的使用 2、字符串类String的使用 3、可变字符串****StringBuilder 4、常见错误 一 何时用到字符与字符串 问题: 输出C#**课考试最高分:**98.5 输出最高分学生姓名:张三 输出最高分学生性别&#x…...
在Ubuntu 16.04上使用LEMP安装WordPress的方法
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 简介 WordPress 是互联网上最流行的 CMS(内容管理系统)。它允许您在 MySQL 后端和 PHP 处理的基础上轻松设置灵…...
显示器放大后,大漠识图识色坐标偏移解决方法
原因分析: 显示器分辨率较高,DPI设置放大125% or 150% or 200%,游戏打开时也会默认会根据显示器的放大比例自行放大,但是大漠综合管理工具抓图不会放大; 解决方法: 1、大漠综合管理…...
C++容器之list基本使用
目录 前言 一、list的介绍? 二、使用 1.list的构造 2.list iterator的使用 3.list capacity 🥇 empty 🥇size 4.list element access 🥇 front 🥇 back 5.list modifiers 🥇 push_front 🥇 po…...
Redis-哨兵
概念 Redis Sentinel 相关名词解释 注意: 哨兵机制不负责存储数据,只是对其它的redis-server进程起到监控的作用哨兵节点,也会搞一个集合,防止一个挂了 ⼈⼯恢复主节点故障 用户监控: 实际开发中,对于服务器后端开发,监控程序,是很重要的 服务器长期运行,总会有一些意外,…...
Pikachu-Sql-Inject - 基于时间的盲注
基于时间的盲注: 就是前端的基于time 的盲注,什么错误信息都看不到,但是还可以通过特定的输入,判断后台的执行时间,从而确定注入。 mysql 里函数sleep() 是延时的意思,sleep(10)就是数据库延时10 秒返回内…...
JAVA开源项目 旅游管理系统 计算机毕业设计
本文项目编号 T 063 ,文末自助获取源码 \color{red}{T063,文末自助获取源码} T063,文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析5.4 用例设计 六、核…...
景联文科技入选《2024中国AI大模型产业图谱2.0版》数据集代表厂商
近日,大数据产业领域头部媒体数据猿携手上海大数据联盟联合发布了备受瞩目的《2024中国AI大模型产业图谱2.0版》。以大数据与AI为代表的智能技术为主要视角,聚焦全产业链,为业内提供更为专业直观的行业指导。 景联文科技凭借高质量数据集&…...
【C语言】内存函数的使用和模拟实现
文章目录 一、memcpy的使用和模拟实现二、memmove的使用和模拟实现三、memset的使用四、memcmp的使用 一、memcpy的使用和模拟实现 在之前我们学习了使用和模拟实现strncpy函数,它是一个字符串函数,用来按照给定的字节个数来拷贝字符串,那么问…...
在WPF中实现多语言切换的四种方式
在WPF中有多种方式可以实现多语言,这里提供几种常用的方式。 一、使用XML实现多语言切换 使用XML实现多语言的思路就是使用XML作为绑定的数据源。主要用到XmlDataProvider类. 使用XmlDataProvider.Source属性指定XML文件的路径或通过XmlDataProvider.Document指定…...
30min 的OpenCV learning Note
1.安装python和pycharm与环境搭配 打开Windows终端:(winR)(一般使用清华镜像网站安装库比较快) pip install opencv-contrib-python -i https://pypi.mirrors.ustc.edu.cn/simple 或者 python -m pip install open…...
C--编译和链接见解
欢迎各位看官!如果您觉得这篇文章对您有帮助的话 欢迎您分享给更多人哦 感谢大家的点赞收藏评论 感谢各位看官的支持!!! 一:翻译环境和运行环境 在ANSIIC的任何一种实现中,存在两个不同的环境1,…...
反向工程与模型迁移:打造未来商品详情API的可持续创新体系
在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...
关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...
Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...
Go 并发编程基础:通道(Channel)的使用
在 Go 中,Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式,用于在多个 Goroutine 之间传递数据,从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...
【C++特殊工具与技术】优化内存分配(一):C++中的内存分配
目录 一、C 内存的基本概念 1.1 内存的物理与逻辑结构 1.2 C 程序的内存区域划分 二、栈内存分配 2.1 栈内存的特点 2.2 栈内存分配示例 三、堆内存分配 3.1 new和delete操作符 4.2 内存泄漏与悬空指针问题 4.3 new和delete的重载 四、智能指针…...
HubSpot推出与ChatGPT的深度集成引发兴奋与担忧
上周三,HubSpot宣布已构建与ChatGPT的深度集成,这一消息在HubSpot用户和营销技术观察者中引发了极大的兴奋,但同时也存在一些关于数据安全的担忧。 许多网络声音声称,这对SaaS应用程序和人工智能而言是一场范式转变。 但向任何技…...
wpf在image控件上快速显示内存图像
wpf在image控件上快速显示内存图像https://www.cnblogs.com/haodafeng/p/10431387.html 如果你在寻找能够快速在image控件刷新大图像(比如分辨率3000*3000的图像)的办法,尤其是想把内存中的裸数据(只有图像的数据,不包…...
