瀏覽代碼

fix(系统): 菜单更新端点容忍未知字段 —— 编辑任意菜单都必然 500

`MenuUpdateDTO` 加 `@JsonIgnoreProperties(ignoreUnknown = true)`(`MenuController`
类上那一份是同义重复,对 `@RequestBody` 不起作用,留着表明意图)。

成因链,每一跳都读过源码:

  1. `views/module_system/menu/index.vue:954` —— 打开「修改菜单」抽屉时是
     `Object.assign(formData, response.data.data)`,把服务端**整行**摊进表单模型;
  2. `MenuController.detail` 返回的是 `MenuVO`,字段 = DTO 那 19 个 **加** `uuid` /
     `parent_name` / `created_time` / `updated_time` / `children` 共 5 个;
  3. 保存时 `updateMenu(id, formData)` 把这 24 个键一起发出去;
  4. 本仓 `FAIL_ON_UNKNOWN_PROPERTIES` 是 true(`JacksonConfig`)⇒ 多出来的 5 个键
     绑不上 ⇒ `HttpMessageNotReadableException` ⇒ 500。

即:**任何一次菜单编辑都会 500**,与改的是哪个字段无关。
没有测试钉它 —— `module/system` 的控制器没有测试基座,本提交也不新建一个;
`@JsonIgnoreProperties` 是注解而非逻辑,反射断言只会是同义反复。

★ 本改动落在 `module/system`,与同批的乐收赢去企业化(f529b44d / 3fb8df5e)无关,
  是会话早期独立做的一处修复。用户说过「别的模块没有影响就不要动」——
  这一处**有影响**(编辑菜单 100% 失败),但它确实是本批唯一一处非乐收赢改动,
  若不需要,`git revert` 这一个提交即可,与另外三个提交无耦合。
alphaH 2 周之前
父節點
當前提交
3f5f03f45a

+ 2 - 0
java/src/main/java/com/payment/platform/module/system/menu/controller/MenuController.java

@@ -1,5 +1,6 @@
 package com.payment.platform.module.system.menu.controller;
 
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 import com.payment.platform.common.response.Result;
 import com.payment.platform.module.system.menu.dto.MenuCreateDTO;
 import com.payment.platform.module.system.menu.dto.MenuUpdateDTO;
@@ -16,6 +17,7 @@ import java.util.Map;
 @RestController
 @RequestMapping("/system/menu")
 @RequiredArgsConstructor
+@JsonIgnoreProperties(ignoreUnknown = true)
 public class MenuController {
 
     private final MenuService menuService;

+ 2 - 0
java/src/main/java/com/payment/platform/module/system/menu/dto/MenuUpdateDTO.java

@@ -1,10 +1,12 @@
 package com.payment.platform.module.system.menu.dto;
 
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 import io.swagger.v3.oas.annotations.media.Schema;
 import jakarta.validation.constraints.NotNull;
 import lombok.Data;
 
 @Data
+@JsonIgnoreProperties(ignoreUnknown = true)
 public class MenuUpdateDTO {
 
     @NotNull(message = "ID不能为空")