`
songshidong
  • 浏览: 21510 次
  • 性别: 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>
分享到:
评论

相关推荐

    SpringMVC PPT_springmvc_

    SpringMVC 也支持 RESTful 风格的 Web 服务,可以通过 @RequestMapping 注解配合 HTTP 方法(GET、POST、PUT、DELETE 等)来创建符合 REST 规范的 API。 十二、单元测试 SpringMVC 提供了 MockMVC 工具,可以方便地...

    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教案.rar

    SpringMVC可以轻松构建RESTful服务,通过HTTP方法(GET、POST、PUT、DELETE等)和@RequestMapping的produces和consumes属性,可以创建符合REST原则的API。 12. **测试**: SpringMVC提供了MockMvc工具,允许在不...

    SpringMVCC.zip

    - SpringMVC支持创建RESTful服务,通过@RequestMapping的GET、POST、PUT、DELETE等HTTP方法实现资源操作。 15. **测试**: - SpringMVC提供了MockMvc工具,可以在不依赖服务器的情况下进行单元测试和集成测试。 ...

    尚硅谷SpringMVC部分全套教学文档笔记

    - RESTful风格的URL设计用于创建、读取、更新和删除(CRUD)操作,通过HTTP方法(GET、POST、PUT、DELETE)对应不同的操作。 - SpringMVC支持使用@RequestMapping和HTTP方法来实现RESTful服务。 8. **国际化**: ...

    燕青老师springmvc的课堂教案

    13. **RESTful API**:通过配置,SpringMVC可以很好地支持RESTful风格的Web服务,利用HTTP动词(GET、POST、PUT、DELETE等)和URI来表示资源和操作。 燕青老师的课堂教案详细讲解了这些概念,并可能通过实例演示...

    狂神说springmvc笔记.zip

    SpringMVC支持创建符合RESTful风格的Web服务,通过HTTP动词(GET、POST、PUT、DELETE等)和URI资源定位。 9. **拦截器**: 拦截器可以实现请求预处理、后处理等功能,如权限验证、日志记录等。 10. **模板引擎**...

    SpringMVC 4.0

    7. **RESTful风格的支持**:SpringMVC 4.0增强了对HTTP方法(GET、POST、PUT、DELETE等)的支持,方便构建RESTful Web服务,通过@RequestMapping注解的params、headers属性可以精确匹配HTTP请求的参数和头信息。...

    SpringMVC实战

    11. **RESTful API**:SpringMVC支持创建RESTful风格的Web服务,通过HTTP动词(GET、POST、PUT、DELETE)来操作资源。 12. **WebSocket**:SpringMVC也可以与WebSocket结合,实现实时通信。 13. **Spring Boot**:...

    Maven springMVC项目实例

    8. **RESTful接口**:通过`@RequestMapping`和HTTP动词(GET, POST, PUT, DELETE等),可以轻松创建符合RESTful风格的API。 **创建SpringMVC项目** 1. **初始化项目**:使用`msm_init`这个项目基础,可能包含初始...

    精通SpringMVC

    10. **RESTful API**:SpringMVC通过@RequestMapping配合HTTP动词(GET、POST、PUT、DELETE等)可以轻松创建符合RESTful风格的API。 通过学习和掌握SpringMVC,开发者能够构建出结构清晰、易于维护的Web应用。同时...

    SpringMVC 入门教程.pdf

    - SpringMVC 支持创建 RESTful 风格的 Web 服务,通过 HTTP 方法(GET、POST、PUT、DELETE)来操作资源。 14. **SpringMVC 与 Spring Boot 结合** - SpringBoot 使得 SpringMVC 的配置更简单,通过自动配置和 ...

    SpringMVC纯注解配置

    3. **@GetMapping, @PostMapping, @PutMapping, @DeleteMapping**:这些是Spring 4.0引入的注解,分别对应HTTP的GET、POST、PUT、DELETE方法,简化了@RequestMapping的使用。 4. **@PathVariable**:用于获取URL...

    springmvc+react demo

    4. **RESTful API设计**: 明白如何根据HTTP方法(GET、POST、PUT、DELETE等)设计API接口,以及如何使用URI资源定位。 5. **构建工具**: 了解如何使用Webpack或其他构建工具将React组件打包,以便在浏览器中运行,...

    springmvc框架源码.zip

    13. **RESTful支持**:通过@RequestMapping和HTTP方法(GET、POST、PUT、DELETE等)支持RESTful风格的Web服务。 14. **国际化与本地化**:SpringMVC提供对不同语言和地区的支持,可以通过LocaleResolver和...

    SpringMVC代码

    10. **RESTful风格**:SpringMVC支持RESTful编程风格,可以通过@RequestMapping的path变量、HTTP动词(GET、POST、PUT、DELETE等)来构建清晰、无状态的API。 11. **上传下载**:SpringMVC提供了处理文件上传和下载...

    SpringMVC学习.pdf

    通过使用@RequestMapping的method属性,开发者可以将方法映射到特定的HTTP方法,如GET、POST、PUT或DELETE,从而更容易地实现RESTful API。 最后,SpringMVC还为数据验证和异常处理提供了强大的支持。通过使用...

    springmvc例子

    - **@GetMapping, @PostMapping, @PutMapping, @DeleteMapping**:分别对应HTTP的GET、POST、PUT、DELETE方法,简化了@RequestMapping的使用。 - **@RequestParam**:用于从请求参数中获取值。 - **@PathVariable...

    SpringMVC3.1实例源码

    SpringMVC 3.1加强了对RESTful风格的支持,允许使用@RequestMapping处理HTTP方法(GET、POST、PUT、DELETE等)。 10. **AOP集成** SpringMVC可以与Spring的面向切面编程(AOP)结合,实现事务管理、日志记录等...

Global site tag (gtag.js) - Google Analytics