@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")
我正在尝试通过 mockMvc
和 flashAttr()
将 @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
,而是填充 fooId
、itemId
和 type
- 为什么会这样以及 2. 有什么解决办法吗?
控制器签名中的@ModelAttibute
缺少一个name
属性,因此控制器会自动从URL中提取参数并放入@ModelAttibute
]
要解决此问题,请将名称 属性 添加到属性中:@ModelAttribute(name = "form")
flashAttr
现在将正确映射到 @ModelAttribute
(只要两者共享相同的名称,在本例中为 "form"
我有一个控制器,方法签名如下
@PostMapping
public String doUpdate(
@PathVariable("fooId") Long ID,
@ModelAttribute Item form,
Model model)
控制器的@RequestMapping
是
@RequestMapping("/foo/{fooId}/Items/{itemId}/type/{type}/update")
我正在尝试通过 mockMvc
和 flashAttr()
将 @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
,而是填充 fooId
、itemId
和 type
- 为什么会这样以及 2. 有什么解决办法吗?
控制器签名中的@ModelAttibute
缺少一个name
属性,因此控制器会自动从URL中提取参数并放入@ModelAttibute
]
要解决此问题,请将名称 属性 添加到属性中:@ModelAttribute(name = "form")
flashAttr
现在将正确映射到 @ModelAttribute
(只要两者共享相同的名称,在本例中为 "form"