文档章节

SpringMVC ------HiddenHttpMethodFilter 过滤器

Rickxue
 Rickxue
发布于 2015/12/17 15:49
字数 477
阅读 77
收藏 0

    Spring3.0以后添加了HiddenHttpMethodFilter过滤器,来支持支持Rest 风格的URL请求。

    REST  url:

          —  /order/1  HTTP GET  :得到 id = 1 的order

          —  /order/1  HTTP DELETE  :删除 id = 1 的order

          —  /order/1  HTTP PUT  :更新 id = 1 的order

          —  /order/1  HTTP POST :新增 id = 1 的order

    首先配置到web.xml文件中

<!-- 可以报POST转成DELETE请求 或POST 请求 -->
<filter>
    <filter-name>HiddenHttperMethodFilter</filter-name>
    <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>

<filter-mapping>
    <filger-name>HiddenHttpMethodFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

  在POST的 请求中设置参数 _method="DELETE" 

<form action="/test/order/1" method="post">
    <input type="hidden" name="_method" value="DELETE" />
    <input type="submit" value="test delete" />
</form>

<form action="/test/order/1" method="post">
    <input type="hidden" name="_method" value="PUT" />
    <input type="submit" value="test PUT" />
</form>

    编写Java方法

@RequestMapping(value="/testRest/{id}",method=RequestMethod.DELETE)
public String testRest(@PathVariable Integer id){
    System.out.println("test delete:"+id);
    return "success";
}

@RequestMapping(value="/testRest/{id}",method=RequestMethod.PUT)
public String testRest(@PathVariable Integer id){
    System.out.println("test delete:"+id);
    return "success";
}

    原来,在HiddenHttpMethodFilter中的doFilterInternal ,会先去POST请求中获取_method这个参数,根据参数的名字来转发请求。

    注意:如果你使用ajax进行传输数据,那么你也应该按照上面的方式做。在你传输数据data里面包含:_method:"PUT"的键值对,并且传输方式依旧设置为"POST".

    不然,你用ajax用"PUT"的方式请求,SpringMVC将无法找到你所要传输的数据,throw Handler execution resulted in exception: Request method 'POST' not supported 这样的异常信息。

    看源代码可以知道,在SpingMVC中本质上只识别GET,POST!

© 著作权归作者所有

Rickxue
粉丝 5
博文 43
码字总数 16647
作品 0
程序员
私信 提问
springMVC笔记系列(7)——HiddenHttpMethodFilter过滤器

什么是REST?首先来段介绍吧。 REST: 即 Representational State Transfer。 (资源)表现层状态转化。 是目前最流行的一种互联网软件架构。它结构清晰、符合标准、易于理解、 扩展方便,所...

HappyBKs
2015/05/19
2.3K
7
Spring MVC 与主流架构 RESTful 的集成

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 https://blog.csdn.net/GitChat/article/details/97791177 前言 这一讲来学习 Spring MVC 对...

GitChat技术杂谈
07/30
0
0
Spring MVC过滤器-HiddenHttpMethodFilter

浏览器form表单只支持GET与POST请求,而DELETE、PUT等method并不支持,spring3.0添加了一个过滤器,可以将这些请求转换为标准的http方法,使得支持GET、POST、PUT与DELETE请求,该过滤器为H...

heroShane
2014/02/10
1K
0
Spring Cloud Gateway 之 Only one connection receive subscriber allowed

都说Spring Cloud Gateway好,我也来试试,可是配置了总是报下面这个错误: 困扰了我几天的问题,原来这是 Spring Boot 2.0.5 以上版本的坑,最终从GitHub上找到了答案: 1、一种变相的解决方...

ThinkGem
2018/10/19
2.3K
0
SpringMVC控制器接收不了PUT提交的参数的解决方案

这次改造了下框架,把控制器的API全部REST化,不做不知道,SpringMVC的REST有各种坑让你去跳,顺利绕过它们花了我不少时间,这次来提下SpringMVC的PUT提交参数为null的情况。 照常先贴出我的...

Big_BoBo
2014/01/10
12.5K
1

没有更多内容

加载失败,请刷新页面

加载更多

Spring使用ThreadPoolTaskExecutor自定义线程池及实现异步调用

多线程一直是工作或面试过程中的高频知识点,今天给大家分享一下使用 ThreadPoolTaskExecutor 来自定义线程池和实现异步调用多线程。 一、ThreadPoolTaskExecutor 本文采用 Executors 的工厂...

CREATE_17
今天
5
0
CSS盒子模型

CSS盒子模型 组成: content --> padding --> border --> margin 像现实生活中的快递: 物品 --> 填充物 --> 包装盒 --> 盒子与盒子之间的间距 content :width、height组成的 内容区域 padd......

studywin
今天
7
0
修复Win10下开始菜单、设置等系统软件无法打开的问题

因为各种各样的原因导致系统文件丢失、损坏、被修改,而造成win10的开始菜单、设置等系统软件无法打开的情况,可以尝试如下方法解决 此方法只在部分情况下有效,但值得一试 用Windows键+R打开...

locbytes
昨天
8
0
jquery 添加和删除节点

本文转载于:专业的前端网站➺jquery 添加和删除节点 // 增加一个三和一节点function addPanel() { // var newPanel = $('.my-panel').clone(true) var newPanel = $(".triple-panel-con......

前端老手
昨天
8
0
一、Django基础

一、web框架分类和wsgiref模块使用介绍 web框架的本质 socket服务端 与 浏览器的通信 socket服务端功能划分: 负责与浏览器收发消息(socket通信) --> wsgiref/uWsgi/gunicorn... 根据用户访问...

ZeroBit
昨天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部