springmvc的請求方式支持
在springmvc中,提供了@RequestMapping
註解幫助我們快速配置一個handler處理器。同時提供了method
屬性支持定義請求方式。如:@RequestMapping(value = "/handle",method = {RequestMethod.POST})
。該url:/handle只支持post的請求方式。
springmvc對Restful風格的支持
我們都知道springmvc已經對Restful風格的url提供了支持,Restful建議使用post
、get
、delete
、put
四種請求方式分別對資源進行增加、查詢、刪除、修改操作。
在springmvc開發中,我們可以使用@RequestMapping
註解定義Restful風格的支持,或者@PostMapping
、@GetMapping
、@DeleteMapping
、@PutMapping
等註解。
但是我們開發中一般使用post
和get
請求方式。對於delete
和put
基本不會使用,因爲這兩種請求方式不安全。
問題點
在Restful風格中,需要我們對刪除和修改分別使用delete
、put
方式請求。如果我們使用了這兩種請求方式,那麼的確符合了Restful風格,但是存在風險。如果不使用我們設計的接口URL就不是Restful風格的。
解決方案
springmvc就是基於這個問題提供瞭解決方案。你可以使用post
方式請求接口,但是web應用中可以配置過濾器來將請求方式轉換。
好處
- 接口調用者使用
post
這種安全的方式請求web應用提供的接口 - web應用內部接口定義
put
、delete
等方式請求,符合Restful風格規範 - 接口調用者使用
post
請求到web應用使用put
、delete
請求方式接受的處理交給springmvc提供的過濾器
開發流程
- web.xml中配置過濾器
org.springframework.web.filter.HiddenHttpMethodFilter
(如果是spring-boot搭建的項目參考spring-boot對於Filter的配置就可以了) - 對於
put
、delete
請求的時候使用post
方式請求,同時增加一個參數_method=delete
,定義實際的請求方式
代碼
web.xml配置文件
<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>
java代碼
/*
* restful delete方式 /demo/handle/15
*/
@RequestMapping(value = "/handle/{id}",method = {RequestMethod.DELETE})
public ModelAndView handleDelete(@PathVariable("id") Integer id) {
Date date = new Date();
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("date",date);
modelAndView.setViewName("success");
return modelAndView;
}
請求url
post方式請求:http://localhost:8080/demo/handle/1?_method=delete
注意 對於請求方式的轉換不要用get,要用post請求才可以轉換