`
songshidong
  • 浏览: 21093 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

springmvc put and delete

阅读更多

最近用rest做项目,为了更符合rest架构风格,项目里面http请求出了GET和POST还用用了PUT、DELETE。

开始写项目的时候就有所了解spring3.X为PUT、DELETE提供了响应的filter(浏览器本身只支持get和post方法),

就在项目的web.xml 里面配置了(其中spring是DispatcherServlet的名称

   <!-- 浏览器不支持put,delete等method,由该filter将/blog?_method=delete转换为标准的http delete方法 -->

    <filter>

        <filter-name>HiddenHttpMethodFilter</filter-name>

        <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>

    </filter>

    <filter-mapping>

        <filter-name>HiddenHttpMethodFilter</filter-name>

        <servlet-name>spring</servlet-name>

    </filter-mapping>

    <filter>

        <filter-name>httpPutFormFilter</filter-name>

        <filter-class>org.springframework.web.filter.HttpPutFormContentFilter</filter-class>

    </filter>

    <filter-mapping>

        <filter-name>httpPutFormFilter</filter-name>

        <servlet-name>spring</servlet-name>

 

    </filter-mapping>

以上我配置了两个filter,HttpPutFormContentFilter主要是处理put请求体带参的问题,如果就配置HiddenHttpMethodFilter

会出现http body中提交的参数值value却为null(spring mvc put方法默认是不会识别请求体里面的参数)。

 

本以为就这样配置就ok、哎还是没有仔细看文档和源码。

   public class HiddenHttpMethodFilter extends OncePerRequestFilte{

        /** Default method parameter: <code>_method</code> */
        public static final String DEFAULT_METHOD_PARAM = "_method";

        private String methodParam = DEFAULT_METHOD_PARAM;


        /**
         * Set the parameter name to look for HTTP methods.
         * @see #DEFAULT_METHOD_PARAM
         */
        public void setMethodParam(String methodParam) {
            Assert.hasText(methodParam, "'methodParam' must not be empty");
            this.methodParam = methodParam;
        }

        @Override
        protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
        throws ServletException, IOException {

        String paramValue = request.getParameter(this.methodParam);
        if ("POST".equals(request.getMethod()) && StringUtils.hasLength(paramValue)) {
        String method = paramValue.toUpperCase(Locale.ENGLISH);
        HttpServletRequest wrapper = new HttpMethodRequestWrapper(request, method);
        filterChain.doFilter(wrapper, response);
    }
    else {
        filterChain.doFilter(request, response);
    }
}

查看这个filter的源码你会发现这个过滤器的原理其实就是将http请求中的_method属性值在doFilterInternal方法中转化为标准的http方法。
需要注意的是,doFilterInternal方法中的if条件判断http请求是否POST类型并且请求参数中是否含有_method字段,也就是说方法只对method为post的请求进行过滤,所哟请求必须如下设置:

用ajax提交:
$.ajax({
        url:‘***’,
        type:‘post’,
        data{
                 _method:put,
              }
      }) 

 用form表单提交:

<form action="..." method="post"
            <input type="hidden" name="_method" value="put" /> 
            ...... 
    </form>
分享到:
评论

相关推荐

    2021全新SpringMVC教程

    1.1_SpringMVC_课程介绍.mp4 1.2_SpringMVC_导学.mp4 ...20_SpringMVC_测试form表单是否能够发送put和delete请求方式的请求.mp4 22_SpringMVC_@RequestMapping注解的headers属性.mp4 23_SpringMVC_Spri

    SpringMVC示例

    本次实践内容包括RequestMapping关键字修饰类和方法(请求方式、请求参数&请求头、Ant风格路径)、PathVariable注解、HiddenHttpMethodFilter 过滤器(将Get请求转换成PUT、DELETE请求)、 RequestParam 注解、...

    SpringMVC Employee Demo

    内容:本次实践内容包括RequestMapping关键字修饰类和方法(请求方式、请求参数&请求头、Ant风格路径)、PathVariable注解、HiddenHttpMethodFilter 过滤器(将Get请求转换成PUT、DELETE请求)、RequestParam 注解、...

    springmvc-jdbcTemplate

    import java.util.ArrayList; import java.util.List; import java.util.Map; import org.apache.commons.collections.CollectionUtils;...import org.apache.log4j.Logger;...import org.springframework.beans....

    基于BootStrap和SpringBoot的学生信息管理系统源码(毕业设计)

    使用了 Restful 设计风格,以 AJAX 发送 PUT 与 DELETE 类型请求;采用了双端校验,前端校验 JQuery,后端校验符合 JSR303 规范 教务系统管理系统 教务管理系统 学生信息管理系统 学校管理系统

    ssm整合案例.zip

    使用了restful设计风格,以ajax发送put与delete类型请求 采用了双端校验,前端校验 JQuery,后端校验符合 JSR303 规范 还涉及到许多的开发细节:Bootstrap搭建页面,MyBatis逆向工程使用,@ResponseBody注解完成...

    基于BootStrap和SpringBoot的学生信息管理系统,支持增删改查等基础操作,适合个人web开发学习,毕业设计或课设等

    使用了 Restful 设计风格,以 AJAX 发送 PUT 与 DELETE 类型请求;采用了双端校验,前端校验 JQuery,后端校验符合 JSR303 规范 基于BootStrap和SpringBoot的学生信息管理系统,支持增删改查等基础操作,适合个人...

    Maven-crud.zip

    使用HTTP协议请求方式的动词,来表示对资 源的操作(GET(查询),POST(新增),PUT(修改),DELETE (删除)) 技术点 • 基础框架-ssm(SpringMVC+Spring+MyBatis) • 数据库-MySQL • 前端框架-bootstrap快速...

    spring_MVC源码

    弃用了struts,用...09. public void delete(final Object model); 10.} [java] view plaincopy 01.package com.mvc.dao; 02. 03.import java.util.List; 04. 05.import org.hibernate.Query; 06...

    Laview-Web-Framework:这个框架类似于spring mvc,它基于servlet3!

    Laview-Web-FrameworkThis...url 最后一级名称 *)方法支持所有请求操作(GET, POST, PUT, DELETE, OPTIONS)*)不带参数的注解:@Get --- GET 请求操作@Post --- POST 请求操作@Delete --- Delete 请求操作 @Put --- put

    rest风格+jdbctemplate的CRUD操作.rar

    ③删除员工: 采取jQuery的方式&lt;input type="hidden" name="_method" value="DELETE" /&gt;传给控制器里面的DELETE请求 ④修改用户:先根据id查询员工(get请求),然后跳转到修改页面,使用form标签回显当前对象内容${...

    SSM实战演练丨ssm整合快速开发CRUD

    使用HTTP协议请求方式的动词,来表示对资的操作(GET(查询),POST(新增),PUT(修改),DELETE(删除)) 源 基于Maven+SpringMVC+Spring+MyBatis+Bootstrap的组合,快速开发一个完整的CRUD功能,视频除过对框架...

    SSM_CRUD:SSM_CRUD (Spring+SpringMVC+Mybatis高级整合)

    4、Rest风格的URI:使用HTTP协议请求方式的动词,来表示对资源的操作(GET(查询)、POST(新赠)、PUT(修改)、DELETE(删除)) 技术点: 1、基础框架-ssm(SpringMVC+Spring+Mybatis) 2、数据库-MySQL 3、前端框架-...

    ssm-crud.zip

    使用HTTP协议请求方式的动词,来表示对资 源的操作(GET(查询),POST(新增),PUT(修改),DELETE (删除)) 所需技术: • 基础框架-ssm(SpringMVC+Spring+MyBatis) • 数据库-MySQL • 前端框架-...

    ssm-crud:SSM + Maven + BootStrap 整合案例

    使用HTTP协议请求方式的动词,来表示对资 源的操作(GET(查询),POST(新增),PUT(修改),DELETE (删除)) 技术点: 基础框架 - ssm(SpringMVC+Spring+MyBatis) 数据库 - MySQL 前端框架 - bootstrap快速...

    ssm-crud

    架构图技术栈以Maven架构项目,使用Spring + SpringMVC + MyBatis框架;采用c3p0开源JDBC数据库连接...使用了Restful设计风格,以AJAX发送PUT与DELETE类型请求;采用了双端校验,前端重复JQuery,替换了符合JSR303规范

    ssm_crud:ssm crud项目 使用ssm bootstrap jquery等技术 入门小demo 员工管理crud

    Rest风格URI:使用Http协议请求方式的动词,来表示对资源的操作GET: /emps/get/{id} 查询GET: /emps/get 查询POST: /emps/save增加PUT: /emps/update/{id} 修改DELETE: /emps/del/{id} 删除DELETE: /emps/dels/{ids}...

    ssmcrud:IDEA,SSM框架写的员工增删改查

    使用HTTP协议请求方式的动词,来表示对资源的操作(GET(查询),POST(新增),PUT(修改),DELETE(删除) 技术点 • 基础框架-ssm(SpringMVC+Spring+MyBatis) • 数据库-MySQL• 前端框架-bootstrap快速搭建...

    n26:解决n26编码挑战的方法

    通过DELETE方法从存储中删除所有事务(有时需要测试,具体取决于您): /transactions通过GET方法查看统计信息: /statistics通过GET方法查看配置值: /config通过PUT方法更改配置值: /config与请求正文: { " ...

    HSSM:高级SSM整合

    4.RESTful风格的URI:使用HTTP协议请求方式的动词,来表示对资源的操作{GET(查询)、POST(修改)、PUT(新增)、DELETE(删除)} 二、技术点分析 1.基础框架SSM(Spring+SpringMVC+Mybatis) 2.数据库MySQL 3.前端...

Global site tag (gtag.js) - Google Analytics