首页 > 解决方案 > 无法将“java.lang.String”类型的值转换为所需的“long”类型;

问题描述

我正在建立一个课程预订网站。现在正在研究“编辑”功能。作为管理员,我可以编辑现有页面并保存它。我试图写它,但有以下错误:

 Failed to convert value of type 'java.lang.String' to required type 'long'; nested exception is java.lang.NumberFormatException: For input string: "editKursInfo"]

我的控制器:

     @GetMapping("/editKursInfo/{id}")
     public String editKursInfo(Model model, @PathVariable("id") long id,
            HttpSession session) {
        Kurs kurs = data.getKursById(id);
        model.addAttribute("kurs", kurs);
        model.addAttribute("edit", kurs);
        return "editKursInfo";
    }

    @PostMapping("/editKursInfo/{id}")
    public String editKursInfo(Model model,
            @Valid @ModelAttribute("edit") Kurs kurs,
            BindingResult bindingresult ,@PathVariable("id") long id
    ) {
      
        data.saveKurs(kurs);
        return "redirect:/editKurs";
    }

和HTML:

 <form action="editKursInfo" method="POST"
                  th:object="${edit}">
                <table width="100%" align="center">
                    <tr>
                        <td>
                            <table  width="100%">  
                                <tr>
                                <tr>   <td align="left" >Kurs Name</td>
                                    <td>
                                        <input th:field="*{kursName}"                                   
                                               type="text"
                                               align="left"                                
                                               class="form-control"
                                               style="width:250px;"                                     
                                               th:errorclass="is-invalid"
                                               id="kursNameInput"
                                               value=""/><br>
                                        <div th:if="${#fields.hasErrors('kursName')}" th:errors="*{kursName}" class="invalid-feedback">          </div>
                                    </td> 
                                </tr>
                            </table>
                        </td>
                    </tr>
                </table>                
                <button type="submit" id="submit" class="btn btn-primary" style="float: right;margin-right: 85px; width: 150px;" >submit</button>                
            </form>

标签: htmlspring-bootthymeleaf

解决方案


标签的action属性<form>没有id您需要的路径变量@PostMapping

调整以使用类似的东西:

<form th:action="@{/editKursInfo/{id}(id=${edit.id})}" 
      method="POST" 
      th:object="${edit}">

PS:在您的@GetMapping方法中,您在 2 个键下拥有相​​同的 Java 对象:

model.addAttribute("kurs", kurs);
model.addAttribute("edit", kurs);

没有必要这样做。

PS 2:最好不要edit在你的 URL 中使用。我建议使用/kurse/{id}or /kurseinfo/{id}。您正在编辑某些内容或只是查看某些内容这一事实由 GET 或 POST 映射决定。


推荐阅读