Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring-无法读取HTTP消息。缺少必需的请求正文_Java_Spring_Http_Spring Boot_Thymeleaf - Fatal编程技术网

Java Spring-无法读取HTTP消息。缺少必需的请求正文

Java Spring-无法读取HTTP消息。缺少必需的请求正文,java,spring,http,spring-boot,thymeleaf,Java,Spring,Http,Spring Boot,Thymeleaf,我试图编辑考试对象,但出现以下错误: 无法读取HTTP消息。缺少必需的请求正文 我认为错误在于您不能发送带有HTTP GET请求的请求正文,但我不知道如何改为发送 用户选择要编辑的考试,我希望HTML将该考试通过控制器 我的控制器: @RequestMapping(value = "/editExam.html{examId}", method = { RequestMethod.GET, RequestMethod.PUT }) public String editExam(@ModelA

我试图编辑考试对象,但出现以下错误: 无法读取HTTP消息。缺少必需的请求正文

我认为错误在于您不能发送带有HTTP GET请求的请求正文,但我不知道如何改为发送

用户选择要编辑的考试,我希望HTML将该考试通过控制器

我的控制器:

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

考试题目:
考试成绩价值
考试成绩
投递

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

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

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

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

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

在HTML中,您没有在提交操作中指定
方法的类型。
@MehrajMalik我确实指定了,但由于某些原因它没有显示,因此在那里编辑了它。我认为错误可能是您无法发送带有HTTP GET请求的请求正文,但我不知道应该如何执行。如果您要发送,应该使用POST而不是GETrequestbody@cool我试过了,它修复了错误,但是现在当我点击编辑考试时,它不再把我带到正确的HTML页面,它只是它有一个默认的localhost主页。就像以前一样,它把我带到了正确的html页面。