zoukankan      html  css  js  c++  java
  • SpringMVC:学习笔记(3)——REST

    SpringMVC:学习笔记(3)——REST

    了解REST风格

      按照传统的开发方式,我们在实现CURD操作时,会写多个映射路径,比如对一本书的操作,我们会写多个URL,可能如下

    web/deleteBookById
    web/updateBookById
    web/addBook
    web/getBookById
    ....
    

      但是由于很难形成统一的URL命名规范,导致了URL命名的混乱REST是面向资源的,URL的设计只需要将资源通过合理方式暴露出来即可。比如:

    web/book
    web/dog
    ....
    

      资源暴露出来了,如何实现传统开发方式的CURD呢?在REST设计规范中,只需将请求方法(GET:查询、POST:新增、PUT:修改、DELETE:删除)进行相对应的设置即可

    GET web/getDogs --> GET web/dogs 获取所有小狗狗 
    GET web/addDogs --> POST web/dogs 添加一个小狗狗 
    GET web/editDogs/:dog_id --> PUT web/dogs/:dog_id 修改一个小狗狗 
    GET web/deleteDogs/:dog_id --> DELETE web/dogs/:dog_id 删除一个小狗

    SpringMVC如何识别REST请求   

      浏览器 form 表单只支持 GET与 POST 请求,而DELETE、PUT 等 method 并不支持。

      Spring3.0 添加了一个过滤器,可以将这些请求转换为标准的 http 方法,使得支持 GET、POST、PUT 与DELETE 请求.这个过滤器就是HiddenHttpMethodFilter过滤器的实现原理大致如下:检测请求参数中是否包含 _method这个参数,如果包含则获取其值,然后判断是哪种操作后继续传递:    

     protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
            //methodParam="_method";
         String paramValue = request.getParameter(this.methodParam);
            if("POST".equals(request.getMethod()) && StringUtils.hasLength(paramValue)) {
                String method = paramValue.toUpperCase(Locale.ENGLISH);
                HiddenHttpMethodFilter.HttpMethodRequestWrapper wrapper = new HiddenHttpMethodFilter.HttpMethodRequestWrapper(request, method);
                filterChain.doFilter(wrapper, response);
            } else {
                filterChain.doFilter(request, response);
            }
    
        }

    实践

    1.配置过滤器HiddenHttpMethodFilter

      我们再之前说了,SpringMVC的HiddenHttpMethodFilter过滤器可以把POST请求转换为DELETE或PUT请求,所以我们先配置该过滤器。

      

    2.在表单中携带隐藏域

      

    说明:name="_method',value是具体的请求方法,DELETE、PUT、OPTION等;

    3.在控制器中处理请求

      

     

  • 相关阅读:
    Leetcode Spiral Matrix
    Leetcode Sqrt(x)
    Leetcode Pow(x,n)
    Leetcode Rotate Image
    Leetcode Multiply Strings
    Leetcode Length of Last Word
    Topcoder SRM 626 DIV2 SumOfPower
    Topcoder SRM 626 DIV2 FixedDiceGameDiv2
    Leetcode Largest Rectangle in Histogram
    Leetcode Set Matrix Zeroes
  • 原文地址:https://www.cnblogs.com/MrSaver/p/6391764.html
Copyright © 2011-2022 走看看