我想向Spring模型添加项目列表。有时会抛出ConversionFailedException
。有问题的方法:
private void addAuthoritiesToModel(Model model){
List<Authority> allAuthorities = Arrays.asList(
Authority.of("ROLE_ADMIN","Admin"),
Authority.of("ROLE_USER","User")
);
model.addAttribute("allAuthorities",allAuthorities);
}
该方法引发最后一行。当从特定方法而不是其他方法调用时,它只会这样做。例如,在这里工作正常:
@GetMapping("/users/new")
public String newUserForm(Model model){
model.addAttribute("user",User.blank());
model.addAttribute("newUser",true);
addAuthoritiesToModel(model);
return "user_details";
}
但是在这里吹了
@PostMapping(value = {"/users","/profile","/users/{any}"})
public String postUser(@Valid @ModelAttribute("user") User user,
BindingResult bindingResult,
@RequestParam("newPassword") Optional<String> newPassword,
@RequestParam("confirmPassword") Optional<String> confirmPassword,
RedirectAttributes redirectAttributes,
@PathVariable("any") String pathVariable
){
if(bindingResult.hasErrors()) {
if(user.getId()==null)
redirectAttributes.addAttribute("newUser",true);
addAuthoritiesToModel(redirectAttributes);
return "user_details";
}
...
}
我尝试将Arrays.asList
交换到另一个List实现,但这不能解决问题。而且它也无法解释,为什么它在第一种情况下不起作用。
答案 0 :(得分:0)
Model
和RedirectAttributes
之间存在差异。
RedirectAttributes
中的值将格式化为字符串。
模型接口的一种特殊化,控制器可用于选择重定向方案的属性。由于添加重定向属性的意图非常明确-即用于重定向URL,因此可以将属性值格式化为字符串并以这种方式存储,以使其有资格附加到查询字符串或扩展为org中的URI变量。 .springframework.web.servlet.view.RedirectView。
除非重定向要求,否则您不应使用,在这种情况下,应为字符串值。