最近和同事討論一個spring mvc的問題,問到HandlerMapping與HandlerAdapter有什么關(guān)系?雖然使用spring mvc時間也不短,但是瞬間能起來的只有兩個關(guān)鍵詞:
@RequestMapping,這個經(jīng)常用的,每個 Controller下面的action方法上一般都會定義一個特有的url路徑。當(dāng)HTTP請求請求發(fā)送到服務(wù)端后會根據(jù)url來查找應(yīng)該執(zhí)行哪個Controller下面的哪個action,我理解為url與java代碼的一個路由關(guān)系。
@RequestMapping(value = "/bss/{priceId}", method = RequestMethod.GET) public ValueResult<ProductPrice> getProductPrice(HttpServletRequest request, @Min(value = 1,message = "priceId不合法") @PathVariable final long priceId) { //省略 }
HandlerInterceptor,這個也是經(jīng)常用的,做請求攔截時比較常用。
上面兩個關(guān)鍵詞盡管與問題有所關(guān)聯(lián),但很明顯不是主要的,核心還是這兩個接口都是做什么的,兩者之間有什么互動。于是我們可以從一個請求開始調(diào)試下spring mvc的調(diào)用過程,以此來分析它們的作用以及關(guān)系。