SpringBoot优点达项目实战:获取系统配置接口(二)
文章目录
1、查看接口
GET /index/getConfig
请求参数
无
返回结果
状态码 | 状态码含义 | 说明 | 数据模型 |
---|---|---|---|
200 | OK | 成功 | Inline |
返回数据结构
状态码 200
名称 | 类型 | 必选 | 约束 | 说明 |
---|---|---|---|---|
» errno | integer | true | none | none |
» errmsg | string | true | none | none |
» data | object | true | none | none |
»» login_title | string | true | none | 登录页标题 |
»» login_bg | string | true | none | 登录页背景 |
»» system_name | string | true | none | 系统名称 |
»» system_logo | string | true | none | 系统logo |
»» web_ico | string | true | none | favicon |
2、查看数据库
从数据库中,可以看出,请求项为管理系统配置
id | group_value | tab_value | attr_key | attr_name | attr_value | del_flag | type | config_value | validator | placeholder |
---|---|---|---|---|---|---|---|---|---|---|
77 | system | login | login_title | 登录页标题 | 优化登录系统 | 0 | 9 | |||
78 | system | login | login_bg | 登录页背景 | static/admin/image/loginbg.png | 0 | 9 | |||
80 | system | base | system_name | 系统名称 | 优化管理系统 | 0 | 9 | |||
81 | system | base | system_logo | 系统logo | static/admin/image/logo.png | 0 | 9 | |||
82 | system | base | web_ico | favicon | static/admin/image/favicon.ico | 0 | 9 |
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")
@JsonIgnore
private 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的包下创建
@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 {
@Autowired
private 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 {
@Autowired
private SystemConfigMapper systemConfigMapper;
/**
* 获取系统配置信息
*
* @return
*/
@Override
public 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,进行接口测试