验证状态:已源码核验、未联调;适用基线:Web
7fe6dd10、services89bd222c;核验日期:2026-09-12
修改一条翻译词条的语言/命名空间/键/值。当前 Web 翻译编辑页提交本操作。服务端做自然键冲突检查:改后自然键若与另一条词条相同则拒绝。
| 页面/功能 | 角色或空间分支 | 调用证据 |
|---|---|---|
| 翻译编辑页提交 | 当前 $spaceId;前端入口要求 administrator 或 configuration-translation:write(route.tsx:31-34);后端同串(TranslationController.java:106) |
app/routes/($lng).$spaceId.configuration.translation.edit.$translationId/route.tsx:102-130 |
| 项 | 值 |
|---|---|
| operationId | http-put-main-service-system-api-configuration-translation-updatebyid-963dd369 |
| method + path | PUT /main-service/system-api/configuration/translation/updateById |
| base URL | 当前 Web 使用同源相对 URL |
| headers | Content-Type: application/json;Authorization: Bearer <token> |
| 序列化 | object body 由公共 wrapper 执行 JSON.stringify |
需要有效登录态,并满足 administrator 角色或 configuration-translation:write。数据行受租户拦截器约束;跨租户行不在 list 结果中出现,冲突检查以当前租户范围执行。认证与空间。
| JSON 路径/参数 | JSON 类型 | 位置 | 必填 | 可空 | 默认值 | 枚举/范围/单位 | 说明 | 字段证据 |
|---|---|---|---|---|---|---|---|---|
translationId |
string | body | 是 | 否 | 无 | 1..32 | 主键 | TranslationUpdateRequestDTO.java @NotBlank @Size(max=32) |
language |
string | body | 是 | 否 | 无 | 1..128 | 语言 | 同上 |
namespace |
string | body | 是 | 否 | 无 | 1..128 | 命名空间 | 同上 |
key |
string | body | 是 | 否 | 无 | ≥1 | 词条键 | 同上 |
value |
string | body | 是 | 否 | 无 | ≥1 | 词条值 | 同上 |
revision |
number | body | 否 | 是 | null |
— | lambdaUpdate 显式 set;无乐观锁作用(省略/null 写 NULL) | 同上;TranslationService.updateById :59-70 |
服务端以改后自然键 list 查询,命中任一 translationId 不同的行即抛 ApiException("Translation repeat")(TranslationController.java:111-123);随后 updateByIdCache→updateById 以 lambdaUpdate 显式 set 全部业务字段(TranslationService.java:59-70),省略键按 NULL 改写——但 Web 编辑表单提交全部业务字段,不受影响。@MyMessage(TRANSLATION_UPDATE_BY_ID) 发布 JMS,由 TranslationListener.updateById 消费并触发视图刷新(TranslationListener.java:67-75)。
| JSON 路径 | JSON 类型 | 出现条件 | 可空 | 枚举/范围/单位 | 说明 | 字段证据 |
|---|---|---|---|---|---|---|
timestamp/status/error/localizedError/path |
同信封 | JSON 响应 | — | — | 成功 status=200 |
gt-common-core/src/main/java/tech/gt/api/ApiResult.java |
extraData |
object | 成功 | 否 | — | 恒为 {} |
同上 |
data |
boolean | 业务完成 | 否 | — | lambdaUpdate 结果;分区触发器可能使成功 UPDATE 报告 0 行(与 save 同族注释),不可当 affected-rows 用 | TranslationController.java:125;TranslationService.java:53-70 |
status=200 表示行已更新且刷新请求已受理;最终翻译视图可见性是异步的(同新增翻译)。
按已核验契约构造的示例,不是真实联调记录。
请求:
成功响应:
认证失败/权限失败/业务拒绝(Translation repeat)/ 请求校验失败。并发编辑同一词条无版本控制(revision 无乐观锁),后写覆盖先写;重试安全(同参数幂等)。
无长连接资源。成功后编辑页导航回列表页。
revision 无乐观锁、lambdaUpdate「省略即写 NULL」为已核实的现行行为;最终视图刷新时延未联调核验。
仅完成双仓静态源码核验,未执行真实 HTTP、数据库或 JMS 联调。
| 结论 | 状态 | 仓库/基线 | 路径、符号及定位 | 内容指纹(脏文件) |
|---|---|---|---|---|
| Web 方法、路径、序列化与消费 | 已源码核验 | web 7fe6dd10 |
translationApi.ts:12 configurationTranslationUpdateByIdApi;edit route.tsx:102-130 |
证据文件与 HEAD 一致 |
| 权限、输入、输出和完成语义 | 已源码核验 | services 89bd222c |
TranslationController.java:107 updateById(冲突检查 :111-123);TranslationService.java:53-70 |
证据文件与 HEAD 一致 |
| 异步视图刷新链 | 已源码核验 | services 89bd222c |
TranslationListener.java:67-75 |
证据文件与 HEAD 一致 |
| 真实部署联调 | 未执行 | — | 未发送请求 | — |