簡體   English   中英

Model.addAttribute:無法將類型'java.util.Arrays $ ArrayList'的值轉換為必需類型'java.lang.String'

[英]Model.addAttribute : Failed to convert value of type 'java.util.Arrays$ArrayList' to required type 'java.lang.String'

我想在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實現,但這並沒有解決問題。 並且它無法解釋為什么它在第一種情況下不起作用。

ModelRedirectAttributes之間存在差異。 RedirectAttributes中的值被格式化為String。

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

控制器可用於為重定向方案選擇屬性的Model接口的特化。 由於添加重定向屬性的意圖非常明確 - 即用於重定向URL,屬性值可以格式化為字符串並以這種方式存儲,以使它們有資格附加到查詢字符串或在org中擴展為URI變量.springframework.web.servlet.view.RedirectView。

除非重定向需要,否則不應使用,在這種情況下應該是字符串值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM