SpringMVC用HiddenHttpMethodFilter配置Rest风格的URL

本文介绍了如何在SpringMVC中实现REST风格的URL,通过HiddenHttpMethodFilter将POST请求转换为DELETE或PUT等HTTP请求。在实际应用中,由于浏览器限制,FORM表单默认只支持GET和POST。Spring3.0引入的HiddenHttpMethodFilter解决了这一问题,但当POST请求被转换为PUT并返回JSP页面时,可能会遇到HTTP 405错误,因为JSP接口仅允许GET和POST。为解决此问题,可以在Controller的方法上添加@ResponseBody注解。

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

1.REST风格的URL

REST的具体定义可以百度查询。

我在知乎上看见一个比较通俗易懂的回答,在这里分享一下:



2.HiddenHttpMethodFilter

浏览器中FORM表单只支持GET和POST两种类型的HTTP请求,而DELETE和PUT等请求方式并不被支持。于是spring3.0中添加了一个过滤器HiddenHttpMethodFilter,它可以通过自己的doFilterInternal方法把POST(只过滤POST请求)请求转换为其他的http请求。


3.具体配制方法

<1>在form表单中配置如下

<form action="..." method="post">  
        <input type="hidden" name="_method" value="put" />  
        ......  
</form>  
<2>为了让HiddenHttpMethodFilter生效,要在web.xml中配置它。需要注意的是它必须配置在dispatcher前面。相关配置文件如下:

      <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>url-pattern>   
      </filter-mapping>

4.遇见的一个问题

在配置好HiddenHttpMethodFilter之后。form表单某个被提交的post请求,被转换成为了put请求,然后映射到某个Controller里面,这个Controller最后返回一个jsp页面。这个时候出现了一个错误:HTTP Status 405 - JSPs only

 permit GET POST or HEAD.

出错的原因是:jsp接口(jsp页面)只支持GET方法和POST方法。

解决方法:给方法加上一个@ResponseBody()注解。




 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值