Spring—請求映射之URL路徑映射

https://www.cnblogs.com/Jsonlu/p/4849183.html

Spring2.5引入註解式處理器支持,通過@Controller 和 @RequestMapping註解定義我們的處理器類。
並且提供了一組強大的註解:
需要通過處理器映射DefaultAnnotationHandlerMapping和處理器適配器
AnnotationMethodHandlerAdapter來開啓支持@Controller 和 @RequestMapping註解的處理器。
@Controller:用於標識是處理器類;
@RequestMapping:請求到處理器功能方法的映射規則;
@RequestParam:請求參數到處理器功能處理方法的方法參數上的綁定;
@ModelAttribute:請求參數到命令對象的綁定;
@SessionAttributes:用於聲明session級別存儲的屬性,放置在處理器類上,通常列出
模型屬性(如@ModelAttribute)對應的名稱,則這些屬性會透明的保存到session中;
@InitBinder:自定義數據綁定註冊支持,用於將請求參數轉換到命令對象屬性的對應類型;

Spring3.0引入RESTful架構風格支持(通過@PathVariable註解和一些其他特性支持),且又引入了
更多的註解支持:
@CookieValue:cookie數據到處理器功能處理方法的方法參數上的綁定;
@RequestHeader:請求頭(header)數據到處理器功能處理方法的方法參數上的綁定;
@RequestBody:請求的body體的綁定(通過HttpMessageConverter進行類型轉換);
@ResponseBody:處理器功能處理方法的返回值作爲響應體(通過HttpMessageConverter進行類型轉換);
@ResponseStatus:定義處理器功能處理方法/異常處理器返回的狀態碼和原因;
@ExceptionHandler:註解式聲明異常處理器;
@PathVariable:請求URI中的模板變量部分到處理器功能處理方法的方法參數上的綁定,
從而支持RESTful架構風格的URI;

Spring3.1使用新的HandlerMapping 和 HandlerAdapter來支持@Contoller和@RequestMapping註解處理器。
新的@Contoller和@RequestMapping註解支持類:處理器映射RequestMappingHandlerMapping和處理器適配器RequestMappingHandlerAdapter組合來代替Spring2.5開始的處理器映射
DefaultAnnotationHandlerMapping和處理器適配器AnnotationMethodHandlerAdapter,提供更多的擴展點。

複製代碼
@Controller // 或 @RequestMapping //將一個POJO類聲明爲處理器
public class HelloWorldController {
@RequestMapping(value = “/hello”) //請求URL到處理器功能處理方法的映射
public ModelAndView helloWorld() {
//1、收集參數
//2、綁定參數到命令對象
//3、調用業務對象
//4、選擇下一個頁面
ModelAndView mv = new ModelAndView();
//添加模型數據 可以是任意的POJO對象
mv.addObject(“message”, “Hello World!”);
//設置邏輯視圖名,視圖解析器會根據該名字解析到具體的視圖頁面
mv.setViewName(“hello”);
return mv; //模型數據和邏輯視圖名
}
}
複製代碼
http請求信息包含六部分信息:
①請求方法,如GET或POST,表示提交的方式;
②URL,請求的地址信息;
③協議及版本;
④請求頭信息(包括Cookie信息);
⑤回車換行(CRLF);
⑥請求內容區(即請求的內容或數據),如表單提交時的參數數據、URL請求參數(?abc=123 ?後邊的)等。

處理器的功能處理方法的映射,因此請求的映射分爲如下幾種:
URL路徑映射:使用URL映射請求到處理器的功能處理方法;
請求方法映射限定:如限定功能處理方法只處理GET請求;
請求參數映射限定:如限定只處理包含“abc”請求參數的請求;
請求頭映射限定:如限定只處理“Accept=application/json”的請求。

普通URL路徑映射
@RequestMapping(value={"/test1", “/user/create”}):多個URL路徑可以映射到同一個處理器的功能處理方法。
URI模板模式映射
@RequestMapping(value="/users/{userId}"):{×××}佔位符, 請求的URL可以是 “/users/123456”或“/users/abcd”,通過@PathVariable可以提取URI模板模式中的{×××}中的×××變量。
@RequestMapping(value="/users/{userId}/create"):這樣也是可以的,請求的URL可以是“/users/123/create”。
@RequestMapping(value="/users/{userId}/topics/{topicId}"):這樣也是可以的,請求的URL可以是“/users/123/topics/123”。
Ant風格的URL路徑映射
@RequestMapping(value="/users/"):可以匹配“/users/abc/abc”,但“/users/123”將會被【URI模板模式映射中的“/users/{userId}”模式優先映射到】@RequestMapping(value="/product?"):可匹配“/product1”或“/producta”,但不匹配“/product”或“/productaa”;
@RequestMapping(value="/product*"):可匹配“/productabc”或“/product”,但不匹配“/productabc/abc”;
@RequestMapping(value="/product/*"):可匹配“/product/abc”,但不匹配“/productabc”;
@RequestMapping(value="/products/
/{productId}"):可匹配“/products/abc/abc/123”或“/products/123”,也就是Ant風格和URI模板變量風格可混用;

正則表達式風格的URL路徑映射
從Spring3.0開始支持正則表達式風格的URL路徑映射,格式爲{變量名:正則表達式},通過@PathVariable提取模式中的{×××:正則表達式匹配的值}中的×××變量了。
@RequestMapping(value="/products/{categoryCode:\d+}-{pageNumber:\d+}"):可以匹配“/products/123-1”,但不能匹配“/products/abc-1”,這樣可以設計更加嚴格的規則。
正則表達式風格的URL路徑映射是一種特殊的URI模板模式映射:
URI模板模式映射是{userId},不能指定模板變量的數據類型,如是數字還是字符串;
正則表達式風格的URL路徑映射,可以指定模板變量的數據類型,可以將規則寫的相當複雜。

組合使用是“或”的關係
如 @RequestMapping(value={"/test1", “/user/create”}) 組合使用是或的關係,即“/test1”或“/user/create”請求URL路徑都可以映射到@RequestMapping指定的功能處理方法。
以上URL映射的測試類爲:cn.javass.chapter6.web.controller.mapping.MappingController.java。
Spring WebMVC不僅僅提供URL路徑映射,還提供了其他強大的映射規則。

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