【发布时间】:2018-03-22 06:49:14
【问题描述】:
我正在尝试编辑考试对象,但出现此错误: 无法读取 HTTP 消息。缺少必需的请求正文。
我认为错误是您无法使用 HTTP GET 请求发送请求正文,但我不知道该怎么做。
用户选择要编辑的考试,我希望 HTML 将该考试 ID 传递给控制器。
我的控制器:
@RequestMapping(value = "/editExam.html{examId}", method = {
RequestMethod.GET, RequestMethod.PUT })
public String editExam(@ModelAttribute("exam") @PathVariable(value =
"examId")Long examId, @RequestBody Exam exam,Model model, BindingResult
result) {
examRepository.findOne(examId);
model.addAttribute("examTitle", exam.getExamTitle());
model.addAttribute("examGradeWorth", exam.getExamGradeWorth());
model.addAttribute("examGradeAchieved", exam.getExamGradeAchieved());
exam.setExamTitle(exam.getExamTitle());
exam.setExamGradeWorth(exam.getExamGradeWorth());
exam.setExamGradeAchieved(exam.getExamGradeAchieved());
examRepository.save(exam);
return "editExam";
}
editExam.html:
<form action="#" th:action="@{/editExam.html{examId}}" th:object="${exam}" method="put">
<table>
<tr>
<td> Exam Title:</td>
<td><input type="text" th:field="*{examTitle}" th:text="${exam.examTitle}"/></td>
<!-- <td th:if="${#fields.hasErrors('examTitlee')}" th:errors="*{examTitle}">error message</td> -->
</tr>
<tr>
<td> Exam grade worth </td>
<td><input th:field="*{examGradeWorth}" /></td>
<!-- <td th:if="${#fields.hasErrors('examGradeWorth')}" th:errors="*{examGradeWorth}">error message</td> -->
</tr>
<tr>
<td>examGradeAchieved</td>
<td><input th:field="*{examGradeAchieved}"/></td>
</tr>
<tr>
<td><button type="submit">Submit post</button></td>
</tr>
</table>
【问题讨论】:
-
在您的 HTML 中,您没有在提交操作中指定
method的类型。 -
<form th:method="put"> -
@MehrajMalik 我确实做到了,但由于某种原因它没有显示,在那里进行了编辑。我认为错误可能是您无法使用 HTTP GET 请求发送请求正文,但我不知道应该如何完成。
-
如果你想发送请求体,你应该使用 POST 而不是 GET
-
@cool 我试过了,它修复了错误,但是现在当我单击编辑考试时,它不再将我带到正确的 HTML 页面,它只是默认的 localhost 主页之一。和以前一样,它把我带到了正确的 html 页面。
标签: java spring http spring-boot thymeleaf