SpringMVC的controller提供了PUT和DELETE的請求方式
在Restful風格中,現有規定如下:
- GET(SELECT):從伺服器查詢,可以在伺服器通過請求的引數區分查詢的方式。
- POST(CREATE):在伺服器新建一個資源,呼叫insert操作。
- PUT(UPDATE):在伺服器更新資源,呼叫update操作。
- DELETE(DELETE):從伺服器刪除資源,呼叫delete語句
如果當前url是 http://localhost:8080/User
那麼使用者只要請求這樣同一個URL就可以實現不同的增刪改查操作,例如
- http://localhost:8080/User?_method=get&id=1001 這樣就可以通過get請求獲取到資料庫 user表裡面 id=1001 的使用者資訊
- http://localhost:8080/User?_method=post&id=1001&name=zhangsan 這樣可以向資料庫user 表裡面插入一條記錄
- http://localhost:8080/User?_method=put&id=1001&name=lisi 這樣可以將 user表裡面 id=1001 的使用者名稱改為lisi
- http://localhost:8080/User?_method=delete&id=1001 這樣用於將資料庫user 表裡面的id=1001 的資訊刪除
在springMVC中實現restful風格開發
這裡,我通過訪問http://127.0.0.1:8080/ssmvc/restful介面的method不同來進入不同的controller方法,並列印返回資料。
- @RequestMapping(value = "/restful",method = RequestMethod.GET)
- public void list(HttpServletRequestrequest,HttpServletResponse response,TestVo vo) throws IOException {
- System.out.println("list被訪問,引數:" + vo.toString());
- Map<String,Object> map= newHashMap<String, Object>();
- map.put("params",vo);
- map.put("method",RequestMethod.GET);
- response.getWriter().write(JSON.toJSONString(map));
- }
- /**
- * restful風格insert介面
- * @param request
- * @param response
- * @param vo
- * @throws IOException
- */
- @RequestMapping(value = "/restful",method = RequestMethod.POST)
- public voidupdate(HttpServletRequest request, HttpServletResponse response, TestVo vo) throws IOException {
- System.out.println("update被訪問,引數:" + vo.toString());
- Map<String,Object> map= newHashMap<String, Object>();
- map.put("params",vo);
- map.put("method",RequestMethod.POST);
- response.getWriter().write(JSON.toJSONString(map));
- }
- /**
- * restful風格update介面
- * @param request
- * @param response
- * @param vo
- * @throws IOException
- */
- @RequestMapping(value = "/restful",method = RequestMethod.PUT)
- public void add(HttpServletRequest request, HttpServletResponse response, TestVo vo) throws IOException {
- System.out.println("add被訪問,引數:" + vo.toString());
- Map<String,Object> map= newHashMap<String, Object>();
- map.put("params",vo);
- map.put("method",RequestMethod.PUT);
- response.getWriter().write(JSON.toJSONString(map));
- }
- /**
- * restful風格delete介面
- * @param request
- * @param response
- * @param vo
- * @throws IOException
- */
- @RequestMapping(value = "/restful/{id}",method = RequestMethod.DELETE)
- public void del(HttpServletRequest request, HttpServletResponse response, @PathVariable("id") String id) throws IOException {
- System.out.println("delete被訪問,引數:" + ", id:"+ id);
- Map<String,Object> map= newHashMap<String, Object>();
- map.put("params",id);
- map.put("method",RequestMethod.DELETE);
- response.getWriter().write(JSON.toJSONString(map));
- }
這裡要注意一下
1.html表單form中,method沒有put、delete。
2.springMVC並不能直接接收到通過put、delete方式傳過來的引數。
我這裡的解決方式是
1.新增過濾器hiddenHttpMethodFilter,作用是將put和delete的引數獲取並重新放入request中,controller便可以直接拿到這些引數。
我們需要在web.xml中配置一個過濾器
<!-- 配置過濾器 將POST請求轉換為PUT和DELETE請求 -->
<filter>
<filter-name>HiddenHttpMethodFilter</filter-name>
<filter-
class
>org.springframework.web.filter.HiddenHttpMethodFilter</filter-
class
>
</filter>
<filter-mapping>
<filter-name>HiddenHttpMethodFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
在表單上增加一個隱藏表單域,將HiddenHttpMethodFilter裡的_method屬性改為put或者delete後提交
因為只有form表單才具有post方法,而這個過濾器也只能將post方法轉化,get則不行。
比如你要提交一個刪除的請求
其Controller裡的方法對應的
@RequestMapping
(value=
"deleteById/{id}"
,method =
RequestMethod.DELETE
)
//RESTFUL風格
<a
class
=
"del"
href=
"deleteById/100"
>DELETE</a>
//將ID為100的刪除
<form action=
""
method=
"post"
id=
"delForm"
>
<input type=
"hidden"
name=
"_method"
value=
"
DELETE
"
>
</form>
當然這種提交是要寫js的
$(function(){
$(
'.del'
).click(function(){
$(
'#delForm'
).attr(
'action'
,
this
.href).submit();
})
})
這段js指令碼的意思就是
在點選<a>標籤刪除的時候將a標籤的href賦值給id為delForm的表單的action然後讓這個form
表單提交.這就完成了將POST請求轉換成DELETE請求,那麼PUT請求也可以同樣這樣做.
相關文章
- SpringMVC中如何傳送GET請求、POST請求、PUT請求、DELETE請求。SpringMVCdelete
- 拙見--springMVC的controller接受的請求引數SpringMVCController
- 呼叫ASP.NET Web API不能傳送PUT/DELETE請求ASP.NETWebAPIdelete
- 精講RestTemplate第5篇-DELETE、PUT等請求方法使用詳解RESTdelete
- 簡述六種請求方法,get、head、put、delete、post、options區別delete
- 封裝 PHP curl http 請求 (全) Composer 安裝 httpbuilder,支援 GET,POST,PUT,DELETE封裝PHPHTTPUIdelete
- 模擬資料支援post, put, delete等http方式deleteHTTP
- SpringMVC原始碼之Handler註冊、獲取以及請求controller中方法SpringMVC原始碼Controller
- 解析HTTP協議六種請求方法,get,head,put,delete,post有什麼區別HTTP協議delete
- SpringMvc的Controller singleton synchronizedSpringMVCControllersynchronized
- 請求方式的分類
- (七)Spring Boot Controller的請求引數獲取Spring BootController
- 胖哥學SpringMVC:請求方式轉換過濾器配置SpringMVC過濾器
- springmvc處理ajax請求SpringMVC
- SpringMVC請求引數解析SpringMVC
- postman 請求引數和 Spring Boot Controller 接受引數PostmanSpring BootController
- springboot請求controller返回Whitelabel Error PageSpring BootControllerError
- ajax 請求的時候 get 和 post 方式的區別?
- springMVC中controller的返回值SpringMVCController
- CodeIgniter3 獲取GET/POST/PUT/DELETE方法多種方式傳參delete
- SpringMVC(2)-Rest請求風格SpringMVCREST
- SpringMVC請求流程原始碼分析SpringMVC原始碼
- SpringMVC 入門、請求、響應SpringMVC
- SpringBoot相容SpringMVC帶有.do字尾的請求Spring BootSpringMVC
- Spring系列 SpringMVC的請求與資料響應SpringMVC
- 聊聊 HTTP 常見的請求方式HTTP
- SSM框架PUT請求前端報400,415,500SSM框架前端
- vue-cli3.x中使用axios傳送請求,配合webpack中的devServer編寫本地mock資料介面(get/post/put/delete)VueiOSWebdevServerMockdelete
- 淺談HTTP中GET和POST請求方式的區別HTTP
- axios(xhr) 和 fetch 兩種請求方式iOS
- Netty整合SpringMVC,實現高效的HTTP服務請求NettySpringMVCHTTP
- springmvc原始碼 ---DispatcherServlet 處理請求SpringMVC原始碼Servlet
- 以Raw的方式傳送POST請求
- 全面分析前端的網路請求方式前端
- php下請求url的幾種方式PHP
- Spring框架系列(5) - 深入淺出SpringMVC請求流程和案例框架SpringMVC
- es請求方式呼叫
- SpringMVC原始碼分析:POST請求中的檔案處理SpringMVC原始碼
- Ajax+SpringMVC實現跨域請求SpringMVC跨域