1. 程式人生 > >spring mvc如何匹配請求路徑(restful介面寫法)

spring mvc如何匹配請求路徑(restful介面寫法)

  @RequestParam,你一定見過;@PathVariable,你肯定也知道;@QueryParam,你怎麼會不曉得?!還有你熟悉的他 (@CookieValue)!她(@ModelAndView)!它(@ModelAttribute)!沒錯,僅註解這塊,spring mvc就為你打開了五彩斑斕的世界。來來來,不要興(mi)奮(hu),坐下來,我們好好聊聊這麼些個註解兄弟們~~~(wait, 都沒有聽過? 好,來,你坐前排,就你!)

一、spring mvc如何匹配請求路徑——“請求路徑哪家強,RequestMapping名遠揚”

  @RequestMapping是用來對映請求的,比如get請求,post請求,或者REST風格與非REST風格的。 該註解可以用在類上或者方法上,如果用於類上,表示該類中所有方法的父路徑。

  舉例(這裡用到的測試類如SpringMVCTest以及一些頁面在第一篇《學習SpringMVC——從HelloWorld開始》中已經介紹):

  SpringMVCTest.java中加入測試方法:

1 2 3 4 5 @RequestMapping("/testRequestMapping") public String testRequestMapping(){ System.out.println("testRequestMapping"); return SUCCESS; }

  注意這裡 在方法級別上添加了註解@RequestMapping(“/testRequestMapping”),  表示可以通過“/testRequestMapping”相對路徑來定位到這個方法,同時我們在SpringMVCTest類上也放了一個類級別的 RequestMapping的註解:

1 2 3 @RequestMapping("/springmvc") @Controller public class SpringMVCTest {

  注意這裡 還添加了一個@Controller的註解,該註解在SpringMVC 中,負責處理由DispatcherServlet 分發的請求,它把使用者請求 的資料經過業務處理層處理之後封裝成一個Model ,然後再把該Model 返回給對應的View 進行展示。至此有了一個 “springmvc/testRequestMapping”這樣的路徑,我們就能夠定位到testRequestMapping這個方法上,然後執行 方法內的方法體。

  再補充一點,RequestMapping可以實現模糊匹配路徑,比如:

  ?:匹配一個字元

  *:匹配任意字元

  **:匹配多層路徑

  /springmvc/**/lastTest 就可以匹配/springmvc/firstTest/secondTest/lastTest這樣的路徑

二、spring mvc如何獲取請求的引數——“八仙過海,各顯神通”

  1. @PathVariable

  該註解用來對映請求URL中繫結的佔位符。通過@PathVariable可以將URL中佔位符的引數繫結到controller處理方法的入參中,沒聽懂?看例子:

1 2 3 4 5 @RequestMapping("/testPathVariable/{id}") public String testPathVariable(@PathVariable(value="id") Integer id){ System.out.println("testPathVariable:" + id); return SUCCESS; }

  在index.jsp中我們新增一條連線,用來觸發一個請求:

<a href="springmvc/testPathVariable/1">testPathVariable</a><br/><br/>

  我們可以 看到這裡有一個超連結,點選後會進入到springmvc/testPathVariable/1對應的controller處理的方法中,那我們現在就 是想獲取到這個請求引數中的“1”,所以在testPathVariable方法上加入“/testPathVariable/id,

{id}的具體對應在該方法的引數中,通過@PathVariable(value="id")來宣告要接收的請求引數,並通過Integer id來繫結和接收。通過該種方式,我們就可以得到前臺頁面請求的引數“1”。

  2. @RequestParam

  該註解也是用來獲取請求引數的。那麼該註解和@PathVariable有何不同呢? 還是看例子:

  在SpringMVCTest中新增方法