如何正确实现attributeHasFieldErrors(无'AssertionError:属性没有BindingResult:abc'错误)

问题描述 投票:2回答:1

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

根据this page java.lang.AssertionError:导致没有属性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")返回"redirect:/owners/{ownerId}"。在执行POST的测试中,期望值"owners/createOrUpdateOwnerForm"以上。它不应该期望"redirect:/owners/{ownerId}"吗?

我很困惑。

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

junit spring-test spring-boot-test
1个回答
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"; } }

© www.soinside.com 2019 - 2024. All rights reserved.