0

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

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

对于@RequestMapping控制器是

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

我试图@ModelAttribute Item通过 a 传递给控制器mockMvc​​,flashAttr()如下所示

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

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

而不是form填充来自flashAttr它的数据fooIditemId并且type

  1. 为什么会发生这种情况? 2. 有什么办法可以解决吗?
4

1 回答 1

0

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

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

于 2019-10-07T16:41:20.567 回答