繁体   English   中英

春季-无法读取HTTP消息。 缺少所需的请求正文

[英]Spring - Failed to read HTTP message. Required request body is missing

我正在尝试编辑检查对象,但出现此错误:无法读取HTTP消息。 缺少所需的请求正文。

我认为错误是您无法通过HTTP GET请求发送请求正文,但我不知道该怎么做。

用户选择要编辑的考试,并且我希望HTML将那个excamId传递给控制器​​。

我的控制器:

 @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>

根据设计/创建REST API的最佳实践,建议...

  • 在数据库中添加任何新资源时,请使用POST HTTP方法
  • 更新现有资源时,请使用PUT HTTP方法
  • 检索资源时,请使用GET HTTP方法
  • 删除任何资源时,请使用DELETE HTTP方法

因此,在您的情况下,您在更新资源时应使用PUT HTTP方法而不是GET (在您的情况下为检查),无论如何, GET HTTP方法不允许用户在HTTP请求中添加请求正文。

我通过将控制器的启动更改为以下错误来修复该错误:

@RequestMapping(value = "/editExam.html/id={examId}", method = { RequestMethod.GET , RequestMethod.POST, RequestMethod.PUT})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM