SpringBoot優點達項目實戰:獲取系統配置接口(二)
文章目錄
- SpringBoot優點達項目實戰:獲取系統配置接口(二)
- 1、查看接口
- 2、查看數據庫
- 3、代碼實現
- 1、創建實體類SysConfig
- 2、創建返回數據的vo
- 3、創建controller類
- 4、實現Service層
- 5、實現mapper層
- 4、測試結果
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")@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的包下創建
@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,進行接口測試