【发布时间】:2021-10-06 14:14:06
【问题描述】:
我的 thymeleaf 删除按钮正在执行 GET 或 POST 请求,但不知道原因。
我正在使用这些启动器:
- Spring Boot
- Spring 安全
- Spring JPA
- Spring Web
我的控制器:
@Controller
public class UserController {
// [...]
@DeleteMapping("/users/delete/{id}")
public String deleteUser(@PathVariable("id") Long id) {
userDeletionService.deleteUserById(id);
return "redirect:/users/list";
}
}
这是第一个尝试使用传递给模板的属性(user)的按钮:
<a th:href="@{'/users/delete/{id}'(id=${user.id})}" class="btn btn-danger btn-sm">Delete</a>
遇到 error 405,我们可以注意到它执行了 GET:
DEBUG org.springframework.security.web.FilterChainProxy - Secured GET /users/delete/18
DEBUG org.springframework.web.servlet.DispatcherServlet - Completed 405 METHOD_NOT_ALLOWED
在这里,我正在尝试一个 sedond 按钮:
<form action="#" th:action="@{'/users/delete/{id}'(id=${user.id})}" th:method="delete" >
<input type="hidden" name="_method" value="delete" />
<button type="submit" id="submitButton"> </button>
</form>
再次因错误 405 而失败,但这一次,它执行了 POST:
DEBUG org.springframework.security.web.FilterChainProxy - Secured POST /users/delete/18
DEBUG org.springframework.web.servlet.DispatcherServlet - Completed 405 METHOD_NOT_ALLOWED
【问题讨论】:
-
链接 (
<a>) 总是GET,表单可以是GET或POST。要发出DELETE,您必须使用 JavaScript (AJAX)。 -
@slauth 非常感谢您清晰的解释!它应该被更多地引用,而不是在调试上浪费太多时间。我会试试这个,然后马上回来。
-
再次感谢@slauth。对我有用的是 Raphael Roussis 在以下链接上的回答(也感谢他):stackoverflow.com/questions/38370011/…
标签: java spring-boot thymeleaf