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

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM