- 扩展 data 字段: yml 3 基础 + sys_frontend_config 全部启用+非SECRET+未软删 - 类型按 config_type 自动转换: NUMBER→number, BOOLEAN→boolean, JSON→object/array - 契约 Result<Map<String,Object>> 不变, 前端零破坏可直接用新字段 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
4.3 KiB
4.3 KiB
/mp/common/config 接口返回全部公开配置(合并 sys_frontend_config)
日期:2026-04-21 PR:#1114(Closes #1112) 合并到 dev commit:767e5cb4 后端服务:hl-user-service(已部署测试环境) 影响前端:小程序端「应用配置」接口字段扩展
为什么改
/mp/common/config 过去只返回 version / minVersion / servicePhone 三个 yml 硬编码字段,管理后台「前端配置」页面(sys_frontend_config 表)运营的所有配置(主题色、Logo、站点名、分页大小、页脚文本等)完全没在小程序端吐出。
改完后小程序端一个接口拿到全部公开配置。
接口签名变化
GET /mp/common/config
契约不变:响应仍是 Result<Map<String, Object>>,data 字段类型保持 Map。
data 内容扩展:
| 字段来源 | 说明 |
|---|---|
| yml 基础(固定存在) | version / minVersion / servicePhone |
sys_frontend_config 表 |
所有启用(status=1)且非 SECRET、未软删除的配置项,key = config_key,value 按 config_type 做类型转换 |
类型转换规则(后端已处理,前端直接使用):
| config_type | JSON value 类型 | 示例 |
|---|---|---|
NUMBER |
number(整数 Long / 小数 Double) |
"defaultPageSize": 20 |
BOOLEAN |
boolean |
"enableWatermark": false |
JSON |
object / array |
"themeConfig": { ... } |
TEXT / COLOR / IMAGE |
string |
"primaryColor": "#1890FF" |
| 解析失败 | 原 string(降级兜底) |
—— |
过滤规则:
config_type = 'SECRET'的不返回(第三方 API key 等敏感配置)status = 0(停用)的不返回deleted_at IS NOT NULL(软删除)的不返回
冲突规则:
- 若
sys_frontend_config表存在config_key = 'version'(或minVersion/servicePhone),DB 值覆盖 yml 默认值 - 当前测试/正式环境 DB 不存在这三个 key,无实际冲突
测试环境实测响应
curl -sk "https://api.test.1814.love:9443/mp/common/config"
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"version": "1.0.0-dev",
"minVersion": "1.0.0",
"servicePhone": "400-000-0000",
"primaryColor": "#1890FF",
"accentColor": "#FF6B35",
"backgroundColor": "#F5F7FA",
"textColor": "#303133",
"defaultPageSize": 20,
"cacheExpireMinutes": 30,
"enableWatermark": false,
"siteName": "呼籁旅行",
"logoUrl": "",
"footerText": "呼籁旅行 版权所有",
"copyrightYear": "2026",
"customerServicePhone": ""
}
}
前端影响
可以改(推荐)
以前:小程序端可能自己在代码里写死主题色、站点名、分页大小等默认值。
现在:这些配置直接从 /mp/common/config 读取,运营后台改完小程序端无需发版即可生效(缓存 30 分钟,运营端保存后自动失效)。
不需要改
version/minVersion/servicePhone三个原有字段完全保留,读取方式不变- 响应结构
{code, message, data, success}不变
前端建议
data类型建议声明为Record<string, any>或按需定义强类型(已知 key 列表见上方实测响应)- 新 key 可能陆续增加(运营后台可以新增),前端按需解构即可,不要假设 data 只有固定字段
- NUMBER 类型已转为 JS number,不用再
parseInt(...);BOOLEAN 已转为 js boolean,不用再比较字符串"true"
缓存行为
- 小程序端接口:
@MpCache(prefix="common:config", ttl=1800s),Redis key:mp:common:config - 运营后台修改
sys_frontend_config任一条 →FrontendConfigService写路径触发depsManager.invalidateSource("table:sys_frontend_config")→MpCommonControllerdeps 命中该 source → 缓存被精准失效 - 首次部署本次 PR 后,旧缓存(ttl 未到期)会阻挡新数据,已在部署时主动清理一次:
redis-cli -n 0 del mp:common:config
关联
- Issue:#1112
- 非目标:本 PR 不改
/mp/config(分组查询接口,MpConfigController) - 历史遗留:
MpCacheEvict.categoryMap中config → table:frontend_config(少sys_前缀)与实际 depstable:sys_frontend_config不一致,本次不动,留后续清理工单