SpringMVC中Http請求方式轉換(post轉換爲put/delete等方式)

springmvc的請求方式支持

​ 在springmvc中,提供了@RequestMapping註解幫助我們快速配置一個handler處理器。同時提供了method屬性支持定義請求方式。如:@RequestMapping(value = "/handle",method = {RequestMethod.POST})。該url:/handle只支持post的請求方式。

springmvc對Restful風格的支持

​ 我們都知道springmvc已經對Restful風格的url提供了支持,Restful建議使用postgetdeleteput四種請求方式分別對資源進行增加、查詢、刪除、修改操作。

​ 在springmvc開發中,我們可以使用@RequestMapping註解定義Restful風格的支持,或者@PostMapping@GetMapping@DeleteMapping@PutMapping等註解。

​ 但是我們開發中一般使用postget請求方式。對於deleteput基本不會使用,因爲這兩種請求方式不安全。

問題點

​ 在Restful風格中,需要我們對刪除和修改分別使用deleteput方式請求。如果我們使用了這兩種請求方式,那麼的確符合了Restful風格,但是存在風險。如果不使用我們設計的接口URL就不是Restful風格的。

解決方案

​ springmvc就是基於這個問題提供瞭解決方案。你可以使用post方式請求接口,但是web應用中可以配置過濾器來將請求方式轉換。

好處

  • 接口調用者使用post這種安全的方式請求web應用提供的接口
  • web應用內部接口定義putdelete等方式請求,符合Restful風格規範
  • 接口調用者使用post請求到web應用使用putdelete請求方式接受的處理交給springmvc提供的過濾器

開發流程

  1. web.xml中配置過濾器org.springframework.web.filter.HiddenHttpMethodFilter(如果是spring-boot搭建的項目參考spring-boot對於Filter的配置就可以了)
  2. 對於putdelete請求的時候使用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請求才可以轉換

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章