无法将类型"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>

<form>标记的action属性没有@PostMapping所需的id路径变量。

调整为使用类似以下内容的内容:

<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:最好不要在URL中使用edit。我建议使用/kurse/{id}/kurseinfo/{id}.您正在编辑某些内容或只是查看某些内容的事实由 GET 或 POST 映射决定。

最新更新