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.在控制器中处理请求

      

     

  • 相关阅读:
    关于嵌入式的技术竞争力
    CentOS7使用ISO镜像文件作为离线Yum源
    CentOS7搭建NAS文件共享存储
    CentOS7安装redis5.0.6
    Windows 10 2004及以后版本删除更新历史记录
    CentOS7手动安装MySQL 8
    python 使用lambda对dict排序
    单片机驱动-软件模拟I2C
    Linux-通过网络nfs和tftp在开发板上运行linux驱动程序
    体验一个前端视图层的mvvm的框架Knockoutjs(双向绑定,模板..)..解放您的双手,不再些那么多的dom操作..快速实现视图层数据与UI的交互处理
  • 原文地址:https://www.cnblogs.com/MrSaver/p/6391764.html
Copyright © 2011-2022 走看看