Model.addAttribute: No se pudo convertir el valor del tipo 'java.util.Arrays $ ArrayList' al tipo requerido 'java.lang.String'

Stefan Fischer:

Quiero añadir una lista de elementos a un modelo de primavera. A veces lanza ConversionFailedException. El método en cuestión:

private void addAuthoritiesToModel(Model model){
    List<Authority> allAuthorities = Arrays.asList(
            Authority.of("ROLE_ADMIN","Admin"),
            Authority.of("ROLE_USER","User")
    );

    model.addAttribute("allAuthorities",allAuthorities);
}

El método lanza en la última línea. Lo curioso sólo lo hace, cuando se llama desde un método particular y no en otros. Por ejemplo, funciona bien aquí:

@GetMapping("/users/new")
public String newUserForm(Model model){
    model.addAttribute("user",User.blank());
    model.addAttribute("newUser",true);
    addAuthoritiesToModel(model);

    return "user_details";
}

Pero sopla aquí:

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

...
}

He tratado de intercambio Arrays.asLista otra implementación de la lista, pero eso no resuelve el problema. Y no explicaría, por lo que no funciona en el primer caso.

Ubercool:

No hay diferencia entre Modely RedirectAttributes. Los valores de RedirectAttributesse están formateados como cadena.

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

Una especialización del modelo de interfaz que los controladores se pueden utilizar para seleccionar atributos para un escenario redireccionamiento. Ya que la intención de añadir atributos de redirección es muy explícita - es decir, que se utilizará para una URL de redireccionamiento, valores de atributos pueden ser formateados como cadenas y almacenados de esa manera para que sean elegibles para ser añadido a la cadena de consulta o expandida como variables URI en org .springframework.web.servlet.view.RedirectView.

No debe usar menos que sea requerido para redireccionar y en tal caso deben ser los valores de cadena.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=219608&siteId=1
Recomendado
Clasificación