Bootstrap

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

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


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")
    @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的包下创建

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 {

    @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,进行接口测试

image-20240626174204198

;