当前位置: 首页 > 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);} };...

synchronized 学习

学习源&#xff1a; https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖&#xff0c;也要考虑性能问题&#xff08;场景&#xff09; 2.常见面试问题&#xff1a; sync出…...

Zustand 状态管理库:极简而强大的解决方案

Zustand 是一个轻量级、快速和可扩展的状态管理库&#xff0c;特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

STM32标准库-DMA直接存储器存取

文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取 DMA可以提供外设…...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候&#xff0c;写过一篇简单实现&#xff0c;后期随着对该模型的深入研究&#xff0c;本次记录涉及到prophet 的公式以及参数调优&#xff0c;从公式可以更直观…...

ETLCloud可能遇到的问题有哪些?常见坑位解析

数据集成平台ETLCloud&#xff0c;主要用于支持数据的抽取&#xff08;Extract&#xff09;、转换&#xff08;Transform&#xff09;和加载&#xff08;Load&#xff09;过程。提供了一个简洁直观的界面&#xff0c;以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

HBuilderX安装(uni-app和小程序开发)

下载HBuilderX 访问官方网站&#xff1a;https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本&#xff1a; Windows版&#xff08;推荐下载标准版&#xff09; Windows系统安装步骤 运行安装程序&#xff1a; 双击下载的.exe安装文件 如果出现安全提示&…...

网络编程(UDP编程)

思维导图 UDP基础编程&#xff08;单播&#xff09; 1.流程图 服务器&#xff1a;短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...

Linux --进程控制

本文从以下五个方面来初步认识进程控制&#xff1a; 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程&#xff0c;创建出来的进程就是子进程&#xff0c;原来的进程为父进程。…...

系统掌握PyTorch:图解张量、Autograd、DataLoader、nn.Module与实战模型

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文通过代码驱动的方式&#xff0c;系统讲解PyTorch核心概念和实战技巧&#xff0c;涵盖张量操作、自动微分、数据加载、模型构建和训练全流程&#…...

[特殊字符] 手撸 Redis 互斥锁那些坑

&#x1f4d6; 手撸 Redis 互斥锁那些坑 最近搞业务遇到高并发下同一个 key 的互斥操作&#xff0c;想实现分布式环境下的互斥锁。于是私下顺手手撸了个基于 Redis 的简单互斥锁&#xff0c;也顺便跟 Redisson 的 RLock 机制对比了下&#xff0c;记录一波&#xff0c;别踩我踩过…...