需求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,…...
【QT Quick】基础语法:基础类与控件
QML 的基础类和控件中,我们可以看到主要的几个分类:基础控件类、窗口类以及组件类。以下是对这些控件及其属性、继承关系等的详细讲解: 控件关系总结 QtObject 是所有 QML 对象的基类。它定义了基础属性,主要用于逻辑和数据封装…...
使用 SSH 连接 Docker 服务器:IntelliJ IDEA 高效配置与操作指南
使用 SSH 连接 Docker 服务器:IntelliJ IDEA 高效配置与操作指南 本文详细介绍了如何在 2375 端口未开放的情况下,通过 SSH 连接 Docker 服务器并在 Idea 中进行开发。通过修改用户权限、生成密钥对以及配置 SSH 访问,用户可以安全地远程操作…...
Gas费用是什么?
Gas费用是什么? 每5个Byte 需要1个GasGasLimit 用来限制合约最多执行多少次运算GasPrice 每次计算需要支付的费用在Web3的语境中,尤其是在以太坊(Ethereum)这样的区块链平台上,Gas费是一个核心概念。以下是关于Gas费的详细解释: 1. 定义 Gas是以太坊网络上的计算单位,…...
大语言模型(LLM)的子模块拆拆分进行联邦学习;大语言模型按照多头(Multi-Head)拆分进行联邦学习
目录 大语言模型(LLM)的子模块拆拆分进行联邦学习 方式概述 简单示例 大语言模型按照多头(Multi-Head)拆分进行联邦学习 场景设定 多头拆分与联邦学习 示例说明 大语言模型(LLM)的子模块拆拆分进行联邦学习 大语言模型(LLM)的子模块拆分进行联邦学习,主要涉及…...
Qt 概述
1. Qlabel HelloWorld 程序 使用纯代码实现 // widget.cpp Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);// 给当前这个lable对象,指定一个父对象QLabel* label new QLabel(this);// C语言风格的字符串可以直接…...
移动应用的界面配置-手机银行APP
设置登录界面为线性布局,组件垂直居中排列设置主页为滚动模式,包括布局、添加背景图片设置按钮样式,包括形状、边框线的宽度和颜色 设置登录界面 设置界面为线性布局,组件垂直居中排列 --android:gravity"center_vertical…...
微服务nginx解析部署使用全流程
目录 1、nginx介绍 1、简介 2、反向代理 3、负载均衡 2、安装nginx 1、下载nginx 2、解压nginx安装包 3、安装nginx编辑 1、执行configure命令 2、执行make命令 4、启动nginx 1、查找nginx位置并启动 2、常用命令 3、反向代理 1、介绍反向代理配置 1、基础配置…...
华硕天选笔记本外接音箱没有声音
系列文章目录 文章目录 系列文章目录一.前言二.解决方法第一种方法第二种方法 一.前言 华硕天选笔记本外接音箱没有声音,在插上外接音箱时,系统会自动弹出下图窗口 二.解决方法 第一种方法 在我的电脑上选择 Headphone Speaker Out Headset 这三个选项…...
Unity中Socket_TCP异步连接,加入断线检测以及重连功能
1、服务端 using System; using System.Collections.Generic; using System.Text; #region 命名空间 using System.Net; using System.Net.Sockets; using System.Threading; using UnityEngine; #endregionnamespace AsynServerConsole {/// <summary>/// Tcp协议异步通…...
Android build子系统(01)Ninja构建系统解读
说明:本文将解读Ninja构建系统,这是当前Android Framework中广泛使用的构建工具。我们将从Ninja的起源和背景信息开始,逐步解读Ninja的优势和核心原理,并探讨其一般使用场景。然后介绍其在Android Framework中的应用及相关工具&am…...
做网站开发的女生多吗/软文代写平台
一、知识点简要 wait() 默认flag为false,程序处于阻塞状态 flag设置为true,程序直接运行set() 使flag为Tureclear() 清除进行的flag,换言之flag设为falseis_set() 判断flag 是否为True 是:True 不是:false 二、代码 1…...
wordpress注册输入密码/链接交换
1.设备JDK 打开命令直插式工具。输入以下三个命令: sudo add-apt-repository ppa:webupd8team/java sudo apt-get update sudo apt-get install oracle-java7-installer 待安装JDK完毕,输入下面命令验证: java -version javac-version 2.配…...
广西建设工程质检安全网站/广告优化师前景怎样
刚才不知道为什么,手痒想随手画个东西。(1)小型我把小型分为:小型、微型、个体户。首先跟大家说明一下,个体户不是个人,是他领的营业执照是个体户。可能这个个体户也雇佣人给人发工资,也一年有几…...
安徽网站建设哪家好/网站搜索优化找哪家
题目描述 给定n个学生的成绩,计算平均分,并统计不及格同学的个数。输入要求 输入一个正整数n表示学生的个数,再输入n个学生的成绩。输出要求 输出分两行。 第一行输出平均分(保留1位小数)。 第二行输出不及格同学的个数。不及格人数为0时…...
网站开发是什么工作/seo推广员是做什么的
OGNL表达式 OGNL:对象视图导航语言(Object-Graph Navigation Language),${user.addr.name} 这种写法就叫对象视图导航OGNL不仅仅可以视图导航,支持比EL表达式更加丰富的功能 1、使用OGNL准备工作 1.1 导包:struts2 的包中已经包含了ÿ…...
wordpress 显示链接替换/网站模板定制
一、标识符定义规则 1.可以由数字、字母、下划线_、美元符号$组成 2.不能以数字开头 3.不能是关键字 4.区分大小写 二、常用标识符命名风格 1、unix like风格:单词用小写字母,每个单词直接用下划线‘_’分割,例如:text_mute…...