html原生表单不支持delete方法,仅支持get和post;需通过spring security的_csrf参数配合_method隐藏字段模拟delete请求,否则浏览器会默认以get方式提交导致405错误。
在spring boot(基于Spring Framework)中,前端html表单无法直接发送DELETE、PUT等非标准http方法——这是HTML规范限制,与Spring配置无关。当您在Thymeleaf模板中设置 method=”delete”(如
✅ 正确做法:使用Spring提供的HTTP方法伪装(Method Overriding)机制:
后端保持 @DeleteMapping 不变(推荐语义清晰):
@DeleteMapping("/conductor/confirmDelete") public String borrarConfirmado(@Valid Conductor driver, BindingResult result, Model model) { condService.borrarPersona(driver); return "redirect:/conductor/list"; }
前端表单必须改为 method=”post”,并添加隐藏字段 _method=DELETE 和CSRF令牌(Spring Security启用时必需):
Nombre: Apellido: Cedula: Teléfono: Dirección: Borrar
⚠️ 注意事项:
@DeleteMapping("/conductor/confirmDelete/{id}") public String borrarConfirmado(@PathVariable Long id, Model model) { condService.borrarPersonaById(id); // 推荐:按ID删除,避免表单绑定风险 return "redirect:/conductor/list"; }
总结:html表单的method属性仅接受get或post;Spring通过_method参数+HiddenHttpMethodFilter将POST请求“重写”为DELETE/PUT等,这是标准且安全的解决方案。切勿依赖无效的method=”delete”,也无需自定义过滤器或禁用CSRF。
如何在网页中正确实现 CSS 文件版本控制?
Next.js 应用白屏问题的常见原因及修复方法