Я хочу добавить список элементов в модель 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 на другую реализацию списка, но это не решает проблему. И это не объяснило бы, почему это не работает в первом случае.
addAttribute(java.lang.String attributeName, java.lang.Object attributeValue) docs.spring.io/spring/docs/current/javadoc-api/org/…




Между Model и RedirectAttributes есть разница.
Значения в RedirectAttributes форматируются как String.
A specialization of the Model interface that controllers can use to select attributes for a redirect scenario. Since the intent of adding redirect attributes is very explicit -- i.e. to be used for a redirect URL, attribute values may be formatted as Strings and stored that way to make them eligible to be appended to the query string or expanded as URI variables in org.springframework.web.servlet.view.RedirectView.
Вы не должны использовать, если это не требуется для перенаправления, и в этом случае это должны быть строковые значения.
какова подпись метода
addAttribute?