我正在尝试在单元测试中使用.andExpect(model().attributeHasFieldErrors
。
根据this page java.lang.AssertionError:没有BindingResult属性:abc是由于受测试的控制器返回的视图是重定向:“redirect:/ xyz / add”。
但与此同时,大部分@PostMapping(/...)
都使用重定向。这是否意味着在这种情况下无法知道attributeHasFieldErrors
?
似乎有可能 - 在这sample它似乎有效 - 但我对此感到困惑:
testProcessUpdateOwnerFormHasErrors
测试方法(上面链接中的底层的第二个方法)执行POST [ i.e. mockMvc.perform(post(... ]
,并期望在Controller类中由GET方法返回的视图名称。
也就是说,@GetMapping("/owners/{ownerId}/edit")
返回"owners/createOrUpdateOwnerForm"
,@PostMapping("/owners/{ownerId}/edit")
在Controller中返回"redirect:/owners/{ownerId}"
。以上测试执行POST期望"owners/createOrUpdateOwnerForm"
。不应该期待"redirect:/owners/{ownerId}"
吗?
我很困惑。
有人可以解释实施attributeHasFieldErrors
的正确方法吗?
答案 0 :(得分:0)
通常,在没有错误的情况下使用重定向,以避免出现多个POSTS。什么时候 出现错误,正常的处理方法是重新显示带有错误消息的相同视图。
类似的东西:
@PostMapping("/")
public String processForm(@Valid UserForm userForm, BindingResult bindingResult, Model model) {
if ( ! bindingResult.hasErrors()) {
Long id = service.saveUser(userForm.getUser());
return "redirect:/user/"+id;
} else {
return "calcForm";
}
}