【SpringMVC】HiddenHttpMethodFilter 转换请求方式

本文介绍如何使用SpringMVC的HiddenHttpMethodFilter将POST请求转换为DELETE或PUT请求。通过在前端表单中添加_method参数,并配置过滤器,可以实现非GET/POST请求的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

由于浏览器只支持发送get和post方式的请求,那么该如何发送put和delete请求呢?
SpringMVC 提供了 HiddenHttpMethodFilter 帮助我们将 POST 请求转换为 DELETE 或 PUT 请求
HiddenHttpMethodFilter 处理put和delete请求的条件:

  • 当前请求的请求方式必须为post
  • 当前请求必须传输请求参数_method
    满足以上条件,HiddenHttpMethodFilter 过滤器就会将当前请求的请求方式转换为请求参数_method的值,因此请求参数_method的值才是最终的请求方式
    在web.xml中注册HiddenHttpMethodFilter
<filter>
    <filter-name>HiddenHttpMethodFilter</filter-name>
    <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>HiddenHttpMethodFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

注:SpringMVC需要在过滤器:HiddenHttpMethodFilter前提供字符编码过滤器CharacterEncodingFilter 。在web.xml中注册时,必须先注册CharacterEncodingFilter,再注册HiddenHttpMethodFilter。(web.xml中过滤器的先后顺序就是过滤器的执行顺序)
原因:

  • 在 CharacterEncodingFilter 中通过 request.setCharacterEncoding(encoding) 方法设置字符集的
  • request.setCharacterEncoding(encoding) 方法要求前面不能有任何获取请求参数的操作
  • 而 HiddenHttpMethodFilter 恰恰有一个获取请求方式的操作:
    String paramValue = request.getParameter(this.methodParam);
    查看怎么设置CharacterEncodingFilter点击这里

设置好HiddenHttpMethodFilter过滤器,我们测试一下,先写一个只能接受delete请求的Controller

@Controller
public class HelloController {

    @RequestMapping(value = "/hello",method = RequestMethod.DELETE)
    public String  hello(String username){
        System.out.println("接受到delete请求username: "+username);
        return "index";
    }

    @RequestMapping("/")
    public String index(){
        return "index";
    }
}

index.html文件

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form th:action="@{/hello}" method="post">
        <input type="hidden" name="_method" value="delete">
        <input type="text" name="username" >
        <input type="submit" value="提交">
    </form>
</body>
</html>

先用请求项目根路径/得到index.html .再借助from表单,发送一个带有键值对_method=deletepost请求,发送到后端可经过HiddenHttpMethodFilter时,会将post报文转变为delete请求方式的报文

在这里插入图片描述
查看后端结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值