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

SpringBoot优点达项目实战:获取系统配置接口(三)

SpringBoot优点达项目实战:获取系统配置接口(二)


文章目录

      • SpringBoot优点达项目实战:获取系统配置接口(二)
        • 1、查看接口
        • 2、查看数据库
        • 3、代码实现
          • 1、创建实体类SysConfig
          • 2、创建返回数据的vo
          • 3、创建controller类
          • 4、实现Service层
          • 5、实现mapper层
        • 4、测试结果

1、查看接口

GET /index/getConfig

请求参数

返回结果

状态码状态码含义说明数据模型
200OK成功Inline

返回数据结构

状态码 200

名称类型必选约束说明
» errnointegertruenonenone
» errmsgstringtruenonenone
» dataobjecttruenonenone
»» login_titlestringtruenone登录页标题
»» login_bgstringtruenone登录页背景
»» system_namestringtruenone系统名称
»» system_logostringtruenone系统logo
»» web_icostringtruenonefavicon
2、查看数据库

image-20240626171542672

从数据库中,可以看出,请求项为管理系统配置

idgroup_valuetab_valueattr_keyattr_nameattr_valuedel_flagtypeconfig_valuevalidatorplaceholder
77systemloginlogin_title登录页标题优化登录系统09
78systemloginlogin_bg登录页背景static/admin/image/loginbg.png09
80systembasesystem_name系统名称优化管理系统09
81systembasesystem_logo系统logostatic/admin/image/logo.png09
82systembaseweb_icofaviconstatic/admin/image/favicon.ico09
3、代码实现
1、创建实体类SysConfig
@Data
public class SystemConfig {@Schema(description = "主键")@TableId(value = "id",type = IdType.AUTO)private Long id;@Schema(description = "配置名称")@TableField(value = "group_value")private String groupValue;@Schema(description = "组件名称")@TableField(value = "tab_value")private String tabValue;@Schema(description = "配置键")@TableField(value = "attr_key")private String attrKey;@Schema(description = "配置名称")@TableField(value = "attr_name")private String attrName;@Schema(description = "配置值")@TableField(value = "attr_value")private String attrValue;@TableLogic@Schema(description = "逻辑删除")@TableField(value = "del_flag")@JsonIgnoreprivate Integer delFlag;@Schema(description = "类型")@TableField(value = "type")private Integer type;@Schema(description = "系统值")@TableField(value = "config_value")private String configValue;@Schema(description = "验证规则")@TableField(value = "validator")private String validator;@Schema(description = "提示文字")@TableField(value = "placeholder")private String placeholder;@Schema(description = "是否能删除")@TableField(value = "can_delete")private Integer canDelete;@Schema(description = "排序")@TableField(value = "sort_num")private Integer sortNum;}
2、创建返回数据的vo

因为前端请求并不需要那么多的数据,所以我们可以在web-admin的包下创建

image-20240626172452307

@Data
@Schema(description = "系统配置实体")
public class SystemConfigVo {@Schema(description = "登录页标题")private String loginTitle;@Schema(description = "登录页背景")private String loginBg;@Schema(description = "系统名称")private String systemName;@Schema(description = "系统logo")private String systemLogo;@Schema(description = "favicon")private String webIco;
}
3、创建controller类
@Tag(name = "基础配置")
@RestController()
@RequestMapping("/index")
@Slf4j
public class BaseSystemConfigController {@Autowiredprivate SystemConfigService systemConfigService;@GetMapping("/getConfig")@Operation(summary = "获取系统配置")public Result<SystemConfigVo> getConfig(){SystemConfigVo systemConfigVo = systemConfigService.getConfig();return Result.ok(systemConfigVo);}
}

包含的注解和类

  • @Tag(name = “基础配置”):这是 OpenAPI(Swagger)的注解,用于给 API 分组,方便生成 API 文档时进行分类。这里的分组名称是 “基础配置”。
  • @RestController:这是 Spring 的注解,表示这个类是一个控制器,并且它的每个方法的返回值会自动转换为 JSON 格式并写入 HTTP 响应中。
  • @RequestMapping(“/index”):这是 Spring 的注解,用于定义请求的基本路径。这里定义了这个控制器的所有请求路径前缀为 /index
  • @Slf4j:这是 Lombok 的注解,用于自动生成一个名为 log 的 Logger 对象,方便在类中进行日志记录。
  • @Autowired:这是 Spring 的注解,用于自动注入依赖。这里注入了 SystemConfigService 服务类。
  • @GetMapping(“/getConfig”):这是 Spring 的注解,用于将 HTTP GET 请求映射到 getConfig 方法。请求路径是 /index/getConfig
  • @Operation(summary = “获取系统配置”):这是 OpenAPI(Swagger)的注解,用于给 API 方法添加描述,方便生成 API 文档时显示。这里的描述是 “获取系统配置”。
4、实现Service层

创建service接口

/*** 针对表sys_config的数据操作service*/
public interface SystemConfigService extends IService<SystemConfig> {/*** 获取系统配置信息* @return*/SystemConfigVo getConfig();/*** 用户等登录* @param systemUser* @return*/String login(SystemUser systemUser);
}
  • extends IService:IService 是 MyBatis-Plus 提供的一个通用服务接口,SystemConfigService 通过继承它获取了许多通用的 CRUD 操作方法。SystemConfig 是实体类,表示 sys_config 表。

实现类

@Service
@Slf4j
public class SystemConfigServiceImpl extends ServiceImpl<SystemConfigMapper, SystemConfig>
implements SystemConfigService {@Autowiredprivate SystemConfigMapper systemConfigMapper;/*** 获取系统配置信息** @return*/@Overridepublic SystemConfigVo getConfig() {List<SystemConfig> systemConfigList = systemConfigMapper.getTabByVale(SystemConfigConstant.SYSTEM_CONFIG_SYSTEM);SystemConfigVo systemConfigVo = new SystemConfigVo();// 定义一个映射,将常量值映射到相应的设置方法Map<String, BiConsumer<SystemConfigVo, String>> configMap = new HashMap<>();configMap.put(SystemConfigConstant.SYSTEM_CONFIG_TAB_LOGIN_TITLE, SystemConfigVo::setLoginTitle);configMap.put(SystemConfigConstant.SYSTEM_CONFIG_TAB_LOGIN_BG, SystemConfigVo::setLoginBg);configMap.put(SystemConfigConstant.SYSTEM_CONFIG_TAB_SYSTEM_NAME, SystemConfigVo::setSystemName);configMap.put(SystemConfigConstant.SYSTEM_CONFIG_TAB_SYSTEM_LOGO, SystemConfigVo::setSystemLogo);configMap.put(SystemConfigConstant.SYSTEM_CONFIG_TAB_WEB_ICO, SystemConfigVo::setWebIco);for (SystemConfig config : systemConfigList) {BiConsumer<SystemConfigVo, String> setter = configMap.get(config.getAttrKey());if (setter != null) {setter.accept(systemConfigVo, config.getAttrValue());}}return systemConfigVo;}
}

类注解

  • @Service:标记该类是一个服务类,Spring 会自动将其注册为 Spring Bean。
  • @Slf4j:由 Lombok 提供,自动生成一个 log 对象用于日志记录。

类声明

  • SystemConfigServiceImpl 类继承了 ServiceImpl<SystemConfigMapper, SystemConfig>,并实现了 SystemConfigService 接口。

依赖注入

  • @Autowired:注入 SystemConfigMapper,用于与数据库交互

getConfig 方法

  • 从数据库中获取系统配置列表。
  • 创建 SystemConfigVo 对象,用于存储系统配置。
  • 定义一个映射,将配置项的键映射到 SystemConfigVo 对象的相应设置方法。
  • 遍历配置列表,根据键值对调用相应的设置方法,将配置值注入 SystemConfigVo 对象。
  • 返回填充了系统配置信息的 SystemConfigVo 对象。

主要逻辑

  • 获取系统配置列表:调用 systemConfigMapper.getTabByVale(SystemConfigConstant.SYSTEM_CONFIG_SYSTEM) 获取系统配置列表。
  • 映射配置项:使用 Map<String, BiConsumer<SystemConfigVo, String>> 将配置项的键映射到 SystemConfigVo 的设置方法。
  • 设置配置值:遍历配置列表,根据键值对调用相应的设置方法,将配置值注入 SystemConfigVo 对象。
  • 返回配置对象:返回包含所有系统配置信息的 SystemConfigVo 对象。
5、实现mapper层
@Mapper
public interface SystemConfigMapper extends BaseMapper<SystemConfig> {@Select("select * from sys_config where tab_value = #{systemConfigSystem}")List<SystemConfig> getTabByVale(String systemConfigSystem);
}
  • @Mapper : MyBatis 这是一个 Mapper 接口,Spring 会自动将其注册为一个 MyBatis Mapper。
  • extends BaseMapper: 使得 SystemConfigMapper 继承了 MyBatis-Plus 提供的通用 Mapper 接口,可以直接使用通用的 CRUD 方法。
  • @Select注解:定义了一个自定义的 SQL 查询语句,用于从 sys_config 表中根据 tab_value 查询记录。
  • getTabByVale 方法根据传入的 systemConfigSystem 参数查询 sys_config 表中的记录,并返回一个 SystemConfig 对象的列表。
4、测试结果

访问knife4j,进行接口测试

image-20240626174204198

相关文章:

SpringBoot优点达项目实战:获取系统配置接口(三)

SpringBoot优点达项目实战&#xff1a;获取系统配置接口&#xff08;二&#xff09; 文章目录 SpringBoot优点达项目实战&#xff1a;获取系统配置接口&#xff08;二&#xff09;1、查看接口2、查看数据库3、代码实现1、创建实体类SysConfig2、创建返回数据的vo3、创建control…...

【C语言】字符/字符串+内存函数

目录 Ⅰ、字符函数和字符串函数 1 .strlen 2.strcpy 3.strcat 4.strcmp 5.strncpy 6.strncat 7.strncmp 8.strstr 9.strtok 10.strerror 11.字符函数 12. 字符转换函数 Ⅱ、内存函数 1 .memcpy 2.memmove 3.memcmp Ⅰ、字符函数和字符串函数 1 .strlen 函数原型&#xff1a;…...

上下文管理器在Python中的妙用

更多Python学习内容&#xff1a;ipengtao.com Python上下文管理器是一个非常强大的工具&#xff0c;它能够帮助开发者在特定代码块前后自动执行特定的操作&#xff0c;常用于资源管理&#xff0c;如文件操作、数据库连接和锁定等。本文将详细介绍Python上下文管理器的概念、使用…...

【PWN · TcachebinAttack | UAF】[2024CISCN · 华中赛区] note

一道简单的tcache劫持 一、题目 二、思路 存在UAF&#xff0c;libc版本2.31&#xff0c;经典菜单题 1.通过unsorted-bin-attack来leak-libc 2.通过uaf打tcache-bin-attack劫持__free_hook实现getshell 三、EXP from pwn import * context(archamd64,log_leveldebug)ioproce…...

Java数据脱敏

数据脱敏 敏感数据在存储过程中为是否为明文, 分为两种 落地脱敏: 存储的都是明文, 返回之前做脱敏处理不落地脱敏: 存储前就脱敏, 使用时解密, 即用户数据进入系统, 脱敏存储到数据库中, 查询时反向解密 落地脱敏 这里指的是数据库中存储的是明文数据, 返回给前端的时候脱…...

【Java Web】三大域对象

目录 一、域对象概述 二、三大域对象 三、域对象使用相关API 一、域对象概述 一些可用于存储数据和传递数据的对象被称为域对象&#xff0c;根据传递数据范围的不同&#xff0c;我们称之为不同的域&#xff0c;不同的域对象代表不同的域&#xff0c;共享数据的范围也不同。 二、…...

【Linux】进程信号_3

文章目录 八、进程信号2. 信号的保存3. 信号的处理 未完待续 八、进程信号 2. 信号的保存 实际执行信号的处理动作称为信号递达(Delivery) 信号从产生到递达之间的状态,称为信号未决(Pending)。 进程可以选择阻塞 (Block )某个信号。 被阻塞的信号产生时将保持在未决状态,直到…...

LongRAG:利用长上下文大语言模型提升检索生成效果

一、前言 前面我们已经介绍了多种检索增强生成 (RAG) 技术&#xff0c;基本上在保证数据质量的前提下&#xff0c;检索增强生成&#xff08;RAG&#xff09;技术能够有效提高检索效率和质量&#xff0c;相对于大模型微调技术&#xff0c;其最大的短板还是在于有限的上下文窗口…...

go中的方法 func-----数据类型

本文是java学习者学go种产生的容易记混点的笔记,所以有其他编译语言的基础更好 go的方法有点像js 基础 func main() {fmt.Println("Starting")var p *string new(string)*p "hello world"demo : "demo"fmt.Println(*&demo) //这样既然也…...

408计算机网络--物理层

一、物理层概述 物理层是干嘛使得&#xff1f; 物理层解决如何在连接各种计算机的传输媒体上传输数据比特流&#xff0c;而不是指具体的传输媒体。 物理层主要任务是确定与传输媒体接口有关的一些特性。定义标准可以理解为插排上的两孔三孔 机械特性&#xff1a;定义物理连接…...

十年,亚马逊云科技合作伙伴网络开启AI新征程

“十年之前&#xff0c;你不认识我&#xff0c;我不认识你&#xff0c;因为云计算我们携手并肩&#xff1b;十年之后&#xff0c;我们仍是伙伴&#xff0c;更是朋友&#xff0c;因为人工智能再次起程。”这就是今天的亚马逊云科技与其合作伙伴的真实写照。 2024年是亚马逊云科技…...

基于Spring Boot的在线医疗咨询平台的设计与实现【附源码】

基于Spring Boot的在线医疗咨询平台的设计与实现 Design and implementation of the computer hardware mall based on Spring Boot Candidate&#xff1a; Supervisor&#xff1a; April 20th, 2024 学位论文原创性声明 本人郑重声明&#xff1a;所呈交的论文是本人在导师…...

星坤Type-A连接器:创新快充技术,引领电子连接!

快速发展的电子时代&#xff0c;消费者对电子设备的性能和便利性有着更高的要求。特别是在充电和数据传输方面&#xff0c;快充技术和高速传输已成为市场的新宠。中国星坤公司推出的Type-A连接器系列&#xff0c;以其卓越的性能和创新的设计&#xff0c;满足了市场对高效、稳定…...

入门JavaWeb之 Response 下载文件

web 服务器接收到客户端的 http 请求 针对这个请求&#xff0c;分别创建一个代表请求的 HttpServletRequest 对象&#xff0c;代表响应的 HttpServletResponse 对象 获取客户端请求过来的参数&#xff1a;HttpServletRequest 给客户端响应一些信息&#xff1a;HttpServletRe…...

Java自定义注解校验token并直接返回给前端状态

自定义注解 CheckToken import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;Target(ElementType.METHOD) Retention(RetentionPolicy.RUNTIME) public int…...

C++ | Leetcode C++题解之第200题岛屿数量

题目&#xff1a; 题解&#xff1a; class Solution { private:void dfs(vector<vector<char>>& grid, int r, int c) {int nr grid.size();int nc grid[0].size();grid[r][c] 0;if (r - 1 > 0 && grid[r-1][c] 1) dfs(grid, r - 1, c);if (r …...

Linux安全配置

Linux系统审计信息有&#xff1a;系统启动日志&#xff08;boot.log&#xff09;、记录用户执行命令日志&#xff08;acct/pacct&#xff09;、记录使用su命令的使用&#xff08;sulog&#xff09;、记录当前登录的用户信息&#xff08;utmp&#xff09;、用户每次登陆和退出信…...

vue实现不预览PDF的情况下打印pdf文件

前景&#xff1a;默认情况&#xff0c;实现打印需要根据预览的内容进行打印。 但是当只有打印按钮存在&#xff0c;不预览文件内容的情况下&#xff0c;实现打印的话&#xff0c;可以通过后端接口返回服务器上PDF的地址,前端通过隐藏的iframe标签中src可实现预览功能 主要是根据…...

C++ | Leetcode C++题解之第199题二叉树的右视图

题目&#xff1a; 题解&#xff1a; class Solution { public:vector<int> rightSideView(TreeNode* root) {unordered_map<int, int> rightmostValueAtDepth;int max_depth -1;stack<TreeNode*> nodeStack;stack<int> depthStack;nodeStack.push(ro…...

[leetcode]圆圈中最后剩下的数字/ 破冰游戏

. - 力扣&#xff08;LeetCode&#xff09; class Solution {int f(int num, int target) {if (num 1) {return 0;}int x f(num - 1, target);return (target x) % num;} public:int iceBreakingGame(int num, int target) {return f(num, target);} };...

C++:std::is_convertible

C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...

css3笔记 (1) 自用

outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size&#xff1a;0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格&#xff…...

2023赣州旅游投资集团

单选题 1.“不登高山&#xff0c;不知天之高也&#xff1b;不临深溪&#xff0c;不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列&#xff0c;以便知晓哪些列包含有价值的数据&#xff0c;…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)

本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...

MySQL 知识小结(一)

一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库&#xff0c;分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷&#xff0c;但是文件存放起来数据比较冗余&#xff0c;用二进制能够更好管理咱们M…...

搭建DNS域名解析服务器(正向解析资源文件)

正向解析资源文件 1&#xff09;准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2&#xff09;服务端安装软件&#xff1a;bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...

腾讯云V3签名

想要接入腾讯云的Api&#xff0c;必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口&#xff0c;但总是卡在签名这一步&#xff0c;最后放弃选择SDK&#xff0c;这次终于自己代码实现。 可能腾讯云翻新了接口文档&#xff0c;现在阅读起来&#xff0c;清晰了很多&…...

FFmpeg:Windows系统小白安装及其使用

一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】&#xff0c;注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录&#xff08;即exe所在文件夹&#xff09;加入系统变量…...

STM32---外部32.768K晶振(LSE)无法起振问题

晶振是否起振主要就检查两个1、晶振与MCU是否兼容&#xff1b;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容&#xff08;CL&#xff09;与匹配电容&#xff08;CL1、CL2&#xff09;的关系 2. 如何选择 CL1 和 CL…...