熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java開源技術 >> 正文

Spring MVC學習之注解介紹

2022-06-13   來源: Java開源技術 

  spring的注解有很多今天主要對如下幾個spring mvc常用的注解進行一個介紹

  @Controller

  @Controller 負責注冊一個bean 到spring 上下文中bean 的ID 默認為類名稱開頭字母小寫你也可以自己指定如下

  方法一

  @Controller

  public class TestController {}

  方法二

  @Controller(tmpController)

  public class TestController {}

  @RequestMapping

  @RequestMapping用來定義訪問的URL你可以為整個類定義一個@RequestMapping或者為每個方法指定一個

  把@RequestMapping放在類級別上這可令它與方法級別上的@RequestMapping注解協同工作取得縮小選擇范圍的效果

  例如

  @RequestMapping(/test)

  public class TestController {}

  則該類下的所有訪問路徑都在/test之下

  將@RequestMapping用於整個類不是必須的如果沒有配置所有的方法的訪問路徑配置將是完全獨立的沒有任何關聯

  完整的參數項為@RequestMapping(value=method ={}headers={}params={})各參數說明如下

     method: RequestMethod[]設置訪問方式字符數組查看RequestMethod類包括GET HEAD POST PUT DELETE OPTIONS TRACE常用RequestMethodGETRequestMethodPOST

  headers:String[] headers一般結合method = RequestMethodPOST使用

  params: String[] 訪問參數設置字符數組 例如userId=id

  value的配置還可以采用模版變量的形式 例如@RequestMapping(value=/owners/{ownerId} method=RequestMethodGET)這點將在介紹@PathVariable中詳細說明

  @RequestMapping params的補充說明你可以通過設置參數條件來限制訪問地址例如params=myParam=myValue表達式訪問地址中參數只有包含了該規定的值myParam=myValue才能匹配得上類似myParam之類的表達式也是支持的表示當前請求的地址必須有該參數(參數的值可以是任意)!myParam之類的表達式表明當前請求的地址不能包含具體指定的參數myParam

  有一點需要注意的如果為類定義了訪問地址為*dol之類的則在方法級的@RequestMapping不能再定義value值否則會報錯例如

  Java代碼

  @RequestMapping(/bbsdo)

  public class BbsController {

  @RequestMapping(params = method=getList)

  public String getList() {

  return list;

  }

  @RequestMapping(value= /spList)

  public String getSpecialList() {

  return splist;

  }

  }

  如上例/bbsdo?method=getList 可以訪問到方法getList() ;而訪問/bbsdo/spList則會報錯

  @PathVariable

  @PathVariable用於方法中的參數表示方法參數綁定到地址URL的模板變量

  例如

  Java代碼

  @RequestMapping(value=/owners/{ownerId} method=RequestMethodGET)

  public String findOwner(@PathVariable String ownerId Model model) {

  Owner owner = ownerServicefindOwner(ownerId);

  modeladdAttribute(owner owner);

  return displayOwner;

  }

  @PathVariable用於地址欄使用{xxx}模版變量時使用

  如果@RequestMapping沒有定義類似/{ownerId} 這種變量則使用在方法中@PathVariable會報錯

  @ModelAttribute

  應用於方法參數參數可以在頁面直接獲取相當於requestsetAttribute()

  應用於方法將任何一個擁有返回值的方法標注上 @ModelAttribute使其返回值將會進入到模型對象的屬性列表中

  應用於方法參數時@ModelAttribute(xx)須關聯到Object的數據類型基本數據類型 如intString不起作用

  例如

  Java代碼

  @ModelAttribute(items)//<——①向模型對象中添加一個名為items的屬性

  public List populateItems() {

  List lists = new ArrayList();

  listsadd(item);

  listsadd(item);

  return lists;

  }

  @RequestMapping(params = method=listAllBoard)

  public String listAllBoard(@ModelAttribute(currUser)User user ModelMap model) {

  bbtForumServicegetAllBoard();

  //<——②在此訪問模型中的items屬性

  Systemoutprintln(ems: + ((List)modelget(items))size());

  return listBoard;

  }

  在 ① 處通過使用 @ModelAttribute 注解populateItem() 方法將在任何請求處理方法執行前調用Spring MVC 會將該方法返回值以items為名放入到隱含的模型對象屬性列表中

  所以在 ② 處我們就可以通過 ModelMap 入參訪問到 items 屬性當執行 listAllBoard() 請求處理方法時② 處將在控制台打印出ems:的信息當然我們也可以在請求的視圖中訪問到模型對象中的 items 屬性

  @ResponseBody

  這個注解可以直接放在方法上表示返回類型將會直接作為HTTP響應字節流輸出(不被放置在Model也不被攔截為視圖頁面名稱)可以用於ajax

  @RequestParam

  @RequestParam是一個可選參數例如@RequestParam(id) 注解所以它將和URL所帶參數 id進行綁定

  如果入參是基本數據類型(如 intlongfloat 等)URL 請求參數中一定要有對應的參數否則將拋出 orgspringframeworkwebutilNestedServletException 異常提示無法將 null 轉換為基本數據類型

  @RequestParam包含個配置 @RequestParam(required = value= defaultValue = )

  required :參數是否必須boolean類型可選項默認為true

  value: 傳遞的參數名稱String類型可選項如果有值對應到設置方法的參數

  defaultValue:String類型參數沒有傳遞時為參數默認指定的值

  @SessionAttributes session管理

  Spring 允許我們有選擇地指定 ModelMap 中的哪些屬性需要轉存到 session 中以便下一個請求屬對應的 ModelMap 的屬性列表中還能訪問到這些屬性這一功能是通過類定義處標注 @SessionAttributes 注解來實現的@SessionAttributes 只能聲明在類上而不能聲明在方法上

  例如

  @SessionAttributes(currUser) // 將ModelMap 中屬性名為currUser 的屬性

  @SessionAttributes({attrattr})

  @SessionAttributes(types = Userclass)

  @SessionAttributes(types = {UserclassDeptclass})

  @SessionAttributes(types = {UserclassDeptclass}value={attrattr})

  @CookieValue 獲取cookie信息

  @RequestHeader 獲取請求的頭部信息


From:http://tw.wingwit.com/Article/program/Java/ky/201311/28084.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.