gpt4 book ai didi

junit - 如何正确实现 attributeHasFieldErrors(没有 'AssertionError: No BindingResult for attribute: abc' 错误)

转载 作者:行者123 更新时间:2023-12-05 07:38:17 35 4
gpt4 key购买 nike

我正在尝试在我的单元测试中使用 .andExpect(model().attributeHasFieldErrors

根据 this page java.lang.AssertionError: No BindingResult for attribute: abc 是因为被测试的controller返回的view是redirect: "redirect:/xyz/add".

但与此同时,大多数@PostMapping(/...)使用重定向。这是否意味着在这种情况下无法知道 attributeHasFieldErrors 是否存在?

这似乎是可能的 - 在这个sample它似乎在工作 - 但我对此感到困惑:

testProcessUpdateOwnerFormHasErrors 测试方法(上面链接底部的第二个方法)执行 POST [ 即 mockMvc.perform(post(... ] ,并期望 Controller 类中的 GET 方法返回的 View 名称。

@GetMapping("/owners/{ownerId}/edit") 返回 "owners/createOrUpdateOwnerForm"@PostMapping("/owners/{ownerId}/edit") 在 Controller 中返回 "redirect:/owners/{ownerId}"。上面执行 POST 的测试需要 "owners/createOrUpdateOwnerForm"。它不应该期待 "redirect:/owners/{ownerId}" 吗?

我很困惑。

有人可以解释实现 attributeHasFieldErrors 的正确方法吗?

最佳答案

通常,您在没有错误时使用重定向,以避免多次 POST。什么时候出现错误,正常的处理方法是重新显示带有错误消息的相同 View 。

类似的东西:

    @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";
}
}

关于junit - 如何正确实现 attributeHasFieldErrors(没有 'AssertionError: No BindingResult for attribute: abc' 错误),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48036393/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com