【问题标题】:Why @GetMapping instead of @DeleteMapping for deleting works in Controller?为什么用@GetMapping 而不是@DeleteMapping 来删除Controller 中的作品?
【发布时间】:2019-12-06 20:25:24
【问题描述】:

我有一个简单的 web 应用程序,显示带有添加和删除按钮的学生列表,如下所示:

index.html - 表格

<tr th:each="student : ${students}">
     <td th:text="${student.firstName} + ' ' + ${student.lastName}"></td>
     <td th:text="${student.email}"></td>
     <td th:text="${student.department}"></td>
     <td><a th:href="@{/delete/{id}(id=${student.id})}" class="btn btn-danger">Delete</a></td>
</tr>

IndexController.java - 用于删除

@GetMapping("/delete/{id}")
    public String deleteStudent(@PathVariable Long id)
    {
        studentService.deleteStudentById(id);
        return "redirect:/";
    }

我的问题 - 为什么在我的控制器中必须是 @GetMapping 才能使用 www 页面上的删除按钮删除学生?当我有@DeleteMapping 时(我认为应该如此),我无法使用 www 页面上的 Delete 按钮删除学生。这样做时有一个405 error,但通过选择删除方法的邮递员我可以删除它。

【问题讨论】:

  • 因为删除按钮只是一个链接,其样式看起来像一个按钮。始终使用 GET 方法请求链接。
  • 我认为您可以将method="delete" 添加到您的a 标签中。默认是获取请求。
  • 您可以使用 GET 以外的其他方式获取链接??stackoverflow.com/questions/6926512/…
  • 好的,现在我明白了,links = get 方法默认。谢谢解答。
  • 附带说明:如果您已经尝试使用 HTTP DELETE 单词,那么将 /delete/ 作为 URI 的一部分是没有用的,您应该选择 @Delete("{id}") .

标签: java spring-boot mapping thymeleaf


【解决方案1】:

@DeleteMapping 注解需要 th: method = "delete" 才能工作。

<td>
      <form  th: action = "@ {/delete/{id}(id=${student.id})}"  th: method = "delete" >
      <input  class = "btn btn-default btn-xs"  type = "submit" = Valeur "Supprimer"  /> 
      </ form> 
</td>

【讨论】:

  • 使用 href 而不是这样的输入来提交表单:Supprimer
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-21
  • 2011-01-07
  • 2021-04-10
  • 2021-11-27
  • 1970-01-01
  • 2021-09-10
  • 1970-01-01
相关资源
最近更新 更多