验证状态:已源码核验、未联调;适用基线:Web
7fe6dd10、services89bd222c;核验日期:2026-09-12
读取数据字典的"业务租户 + default 兜底"合并列表,供前端选择器整段加载。该入口按租户显式条件寻址缓存并在租户豁免作用域执行,是任意已登录用户可跨业务租户读取的既定合同,不是普通 list 的别名。
| 页面/功能 | 角色或空间分支 | 调用证据 |
|---|---|---|
| 登录后字典预取 | 任意已登录用户;tenantId 为业务字典空间选择参数 |
app/.client/components/data-dictionary-select-1.tsx:8 |
| 登录后字典预取(2) | 任意已登录用户;tenantId 为业务字典空间选择参数 |
app/routes/($lng).$spaceId/route.tsx:89 |
| 项 | 值 |
|---|---|
| operationId | http-post-main-service-system-api-configuration-data-dictionary-listcache-f90f6af2 |
| method + path | POST /main-service/system-api/configuration/data-dictionary/listCache |
| base URL | 当前 Web 使用同源相对 URL;App 的部署 base URL 未由源码固定 |
| headers | Accept: application/json;charset=UTF-8;有登录态时 Authorization: Bearer <token>;body 操作为 Content-Type: application/json |
| 序列化 | object body 由公共 wrapper 执行 JSON.stringify;当前 Web 全局预取发送 { tenantId: <当前租户> },选择器挂载时发送 {} |
需要有效登录态;该入口(Plus Controller)没有 @PreAuthorize 资源权限,任何已登录用户可读。认证失败与适用出口见错误差异页。 查询在租户豁免作用域执行并以请求 DTO 的 tenantId 显式寻址(gt-common-configuration-common/src/main/java/tech/gt/configuration/service/DataDictionaryService.java:83-85);请求中的租户字段在这里就是合同的一部分,不代替空间切换。
| JSON 路径/参数 | JSON 类型 | 位置 | 必填 | 可空 | 默认值 | 枚举/范围/单位 | 说明 | 字段证据 |
|---|---|---|---|---|---|---|---|---|
| body | object | body | 是 | 否 | {} |
见查询字段 | DataDictionaryListRequestDTO;通用查询控制字段见查询控制字段 |
gt-common-configuration-dto/src/main/java/tech/gt/configuration/dto/DataDictionaryListRequestDTO.java |
tenantId |
string | body | 否 | 是 | 空 → 仅读 default 公共空间 | default 或业务租户 ID |
业务字典空间选择参数;非空且非 default 时服务端先读业务租户再读 default 并合并 | es-center-server-main-service/src/main/java/com/es/center/server/configuration/controller/DataDictionaryPlusController.java:59-77 listCache |
| JSON 路径 | JSON 类型 | 出现条件 | 可空 | 枚举/范围/单位 | 说明 | 字段证据 |
|---|---|---|---|---|---|---|
timestamp |
number | JSON 响应 | 否 | epoch 毫秒 | 响应生成时间 | gt-common-core/src/main/java/tech/gt/api/ApiResult.java |
status |
number | JSON 响应 | 否 | 成功为 200 | 不能只看 HTTP status | gt-common-core/src/main/java/tech/gt/api/ApiResult.java |
error/localizedError/path |
string | null | JSON 响应 | 是 | — | 成功通常为 null;失败见差异页 | gt-common-core/src/main/java/tech/gt/api/ApiResult.java |
extraData |
object | 成功 | 否 | — | 本操作无专属键,恒为 {} |
gt-common-core/src/main/java/tech/gt/api/ApiResult.java |
data |
array | 业务成功 | 否 | — | 业务租户在前、default 兜底在后的合并数组;合并上限 20000;字段见本资源族字段模型 | DataDictionaryPlusController.java:69-75 businessList/defaultList + mergeBusinessFirst(…, 20_000);DictionaryDefaultFallbackSupport.java:22-31 |
status=200 且 data 数组可消费表示读取结束。但结果来自带 TTL 的缓存(见下),不承诺与最新写入实时一致。
以下均为按已核验契约构造的示例,不是真实联调记录;ID、时间与租户为占位值。
请求:
成功响应:
信封字段证据:gt-common-core/src/main/java/tech/gt/api/ApiResult.java(成功/失败信封)与 es-center-server-main-service/src/main/java/com/es/center/server/config/JsonFormatConfig.java:20-113(时间序列化)。
认证失败/权限失败:认证与资源权限拒绝的 wire 形态见错误差异页对应锚点。 本入口没有资源权限检查;读取走缓存(10 分钟 TTL,本地+远程两级,syncLocal)。配置写入不会主动失效该缓存(configuration 模块内无 @CacheInvalidate),写后最长 10 分钟 内可能读到合并结果未刷新的数据。 公共 Web helper 默认 15 分钟超时(app/.common/lib/fetch-timeouts.ts:4-76 fetchTimeout/fetchTimeoutResponseJson)。读取无副作用,可按网络策略重试。
登录后根路由在 tenantId 就绪时以当前租户预取并写入全局 store(500ms 节流;重试 10 次);各选择器组件挂载时以空 body 再取(等价 default 空间读取),store 侧再按"当前租户优先、default 兜底"本地过滤。切换空间/租户会触发重新拉取。
缓存 TTL(10 分钟)内的写后读不一致是已核实的现行行为,不是缺陷推断;配置模块无主动缓存失效。 合并上限 20000 与单租户默认 10000 是服务端常量;超限时的截断行为以代码为准(合并结果静默截断),未联调复核。 无已知会阻止按当前源码调用的其他关键证据缺口。未执行真实 HTTP、数据库或缓存联调。
| 结论 | 状态 | 仓库/基线 | 路径、符号及定位 | 内容指纹(脏文件) |
|---|---|---|---|---|
| Web 方法、路径、序列化与消费 | 已源码核验 | web 7fe6dd10 |
app/.client/api/system/configuration/dataDictionaryApi.ts:31 configurationdataDictionaryListCacheApi;app/.client/components/data-dictionary-select-1.tsx:8;app/routes/($lng).$spaceId/route.tsx:89;公共 wrapper:app/.common/lib/fetch-timeouts.ts:4-76 fetchTimeout/fetchTimeoutResponseJson |
证据文件与 HEAD 一致 |
| 权限、输入、输出和完成语义 | 已源码核验 | services 89bd222c |
es-center-server-main-service/src/main/java/com/es/center/server/configuration/controller/DataDictionaryController.java:55 listCache;gt-common-configuration-common/src/main/java/tech/gt/configuration/service/DataDictionaryService.java:80-86 listCache;es-center-server-main-service/src/main/java/com/es/center/server/configuration/function/DictionaryDefaultFallbackSupport.java:22-31 mergeBusinessFirst |
证据文件与 HEAD 一致 |
| JSON 字段与时间类型 | 已源码核验 | services 89bd222c |
本资源族字段模型;DataDictionaryListResponseDTO.java、DataDictionaryGetByIdResponseDTO.java(gt-common-configuration-dto/src/main/java/tech/gt/configuration/dto/) |
证据文件与 HEAD 一致 |
| 清单归属 | 已重新比对 | inventory | .scratch/institutional-app-api-docs/inventory/operations.json |
SHA-256 b5cce137b4fc602840fdbe74c99d90667b3e581815bddc709e263ffcc64e00f9(工作树仅既有格式化漂移,本票未修改) |
| 真实部署联调 | 未执行 | — | 未发送请求、未连接数据库/缓存/JMS | — |