Spring MVC 常用註解之 Controller 篇

Shopping Without Vision 的 project 終於告一段落,teamwork 非常給力,中間也遇到很多困難,還好都一起克服了。這是做的第二個 Spring MVC  項目了,對這個框架在很多細節上又多了些深入的理解。這篇文章想總結一下關於 controller 中我們用到的幾個註解。

@Controller

Controller 是 MVC 中的 C —— 控制層,如果不基於註解,該類需要繼承 CommandController,如果基於註解,只需要在類名前加上註解 @Controller,這樣當服務器啓動時,spring 會自動掃描所有包,掃描到帶有這個註解的類,spring 會告訴服務器,這是一個 controller,它可以接收和處理來自用戶的請求。

 

@RequestMapping

假設請求的 URL 是: http://localhost:8080/項目名/xxx,這時在所有的 controller 中,根據 “xxx” 尋找處理請求的方法。所以我們只需要在用作 controller 的類裏面可以處理請求的對應方法前加上註釋,例如:

 

@RequestMapping(value = "/add", method = RequestMethod.GET)
public String addProduct(Model model) {
	Product product = new Product();
	List<Category> categories = categoryService.getCurrent();
	model.addAttribute("categories", categories);
	model.addAttribute("product", product);
	return "addProduct";
}

 

方法最後 return 的字符串,就是對應的 view 頁面。

@ModelAttribute

該註解有兩種用法,一種是註釋方法,另一種是註釋參數,我們用在第二種情況,示例代碼:

 

@RequestMapping(value="/adding",method=RequestMethod.POST)
publicStringaddingProduct(@Valid@ModelAttribute("product")Productproduct,
HttpServletRequestrequest,Modelmodel){
System.out.println(product.getCategory().getCid());
System.out.println("product is"+product);
productDaoImp.insert(product);
List<Product>plist=productDaoImp.getProducts();
model.addAttribute("plist",plist);
List<Category>categories=categoryService.getCurrent();
model.addAttribute("categories",categories);
return"products";
}

 

@ModelAttribue 前的 @Valid 用來進行數據的校驗。由於此處沒有用到 @SessionAttributes,所以 product 的 scope 爲 request,否則就是 session。在這個例子裏,@ ModelAttribute (“product”) Product product 的作用是將綁定的命令對象以 “product” 爲名稱,又將 “plist” 和 “categories” 添加到模型對象中,供視圖頁面 (view) 展示使用。我們可以在視圖頁面使用 {plist.xxx} 和 ${categories.xxx} 來獲取綁定的命令對象的屬性。

@PathVariable

如果請求路徑上有 id 變量值,可以通過 @PathVariable 來獲取,如:

 

@RequestMapping(value="/{productId}/delete",method=RequestMethod.GET)
publicStringdeleting(@PathVariableintproductId,HttpServletRequestrequest,Modelmodel){
Productproduct=productDaoImp.findById(productId);
productDaoImp.delete(product);
List<Product>plist=productDaoImp.getProducts();
model.addAttribute("plist",plist);
List<Category>categories=categoryService.getCurrent();
model.addAttribute("categories",categories);
return"products";
}

 

歡迎關注我的知乎專欄【數據池塘】,專注於分享機器學習、數據挖掘乾貨:https://zhuanlan.zhihu.com/datapool

 

⬇️ 微信公衆號 ⬇️

發佈了38 篇原創文章 · 獲贊 23 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章