@ModelAttribute 被 URL 值覆盖

@ModelAttribute Overwritten by URL Values

我有一个控制器,方法签名如下

@PostMapping
public String doUpdate(
        @PathVariable("fooId") Long ID,
        @ModelAttribute Item form,
        Model model) 

控制器的@RequestMapping

@RequestMapping("/foo/{fooId}/Items/{itemId}/type/{type}/update")

我正在尝试通过 mockMvcflashAttr()@ModelAttribute Item 传递给控制器​​,如下所示

 String url = String.format("/foo/%s/Items/%s/type/%s/update", fooId, itemId, type);

 mockMvc.perform(post(url)).flashAttr("form", updateContact))

不是用 flashAttr 中的数据填充 form,而是填充 fooIditemIdtype

  1. 为什么会这样以及 2. 有什么解决办法吗?

控制器签名中的@ModelAttibute缺少一个name属性,因此控制器会自动从URL中提取参数并放入@ModelAttibute ]

要解决此问题,请将名称 属性 添加到属性中:@ModelAttribute(name = "form") flashAttr 现在将正确映射到 @ModelAttribute(只要两者共享相同的名称,在本例中为 "form"