Spring MVC中form表单_method=delete提交DELETE请求失败如何解决
核心问题解答
使用value="delete"的隐藏input标签发送DELETE请求本身不是错误写法,这是Spring生态中HTML表单提交REST风格请求的官方标准实现方案,底层依赖HiddenHttpMethodFilter过滤器读取_method参数值,覆盖原始POST请求的方法类型。
问题根因定位
从报错可以看出请求实际被@PostMapping匹配,说明HiddenHttpMethodFilter没有将当前请求的方法转换为DELETE,结合PUT请求可正常生效的表现,可从以下方向排查:
- 检查
_method参数的大小写:Spring默认的HiddenHttpMethodFilter允许的方法列表为大写的PUT、DELETE、PATCH,部分版本会严格匹配大小写,可尝试将value="delete"改为value="DELETE"测试。 - 检查自定义过滤器配置:如果你手动修改过
HiddenHttpMethodFilter的允许方法列表,确认是否漏掉了DELETE的配置。 - 检查参数传递:可在
@PostMapping对应的方法中打印当前请求的参数和请求方法,确认_method参数是否被正常传递到后端,是否被其他拦截器提前移除。
临时解决方案
如果排查过滤器配置耗时较长,也可以暂时给DELETE接口新增POST的路由兼容,或者改用AJAX发送原生DELETE请求,均可规避当前问题。
内容的提问来源于stack exchange,提问作者thecenterofpower
相关产品推荐
相关产品推荐

