Model.addAttribute: не удалось преобразовать значение типа 'java.util.Arrays $ ArrayList' в требуемый тип 'java.lang.String' - PullRequest
3 голосов
/ 19 марта 2019

Я хочу добавить список элементов в Spring Model.Иногда выбрасывает 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, но это не решает проблему.проблема.И это не объясняет, почему это не работает в первом случае.

1 Ответ

0 голосов
/ 19 марта 2019

Существует разница между Model и RedirectAttributes.Значения в RedirectAttributes форматируются как String.

https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/servlet/mvc/support/RedirectAttributes.html

Специализация интерфейса модели, которую контроллеры могут использовать для выбора атрибутов для сценария перенаправления.Поскольку цель добавления атрибутов перенаправления является очень явной - то есть для использования для URL-адреса перенаправления, значения атрибутов могут быть отформатированы как строки и сохранены таким образом, чтобы их можно было добавлять в строку запроса или расширять как переменные URI в org..springframework.web.servlet.view.RedirectView.

Не следует использовать, если это не требуется для перенаправления, и в этом случае должны быть строковые значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...