RequestMapping注解類
在mvc-dispatcher-servlet.xml(也可能名字不一樣,就是springmvc的配置文件)中车胡,添加掃描
<context:component-scan>
用于掃描包中的@contorller控制器類,攔截URL抱婉。在Controller控制器類的類定義和方法定義處都可以標(biāo)注@RequestMapping珊膜,用于處理路徑請求。
DispatcherServlet截獲請求后侧戴,就可以通過控制器上的@RequestMapping提供的映射信息確定請求所對應(yīng)的處理方法宁昭。
RequestMapping屬性:value method consumes produces params headers
method類型:GET POST PUT DELETE
cosumes:制定請求提交內(nèi)容的類型 如{application/json,text/plain}可以是一個數(shù)組酗宋,也可以是一個字符串积仗。
produces:返回的內(nèi)容類型。
params:表示 請求中必須包含某些參數(shù)才會出發(fā)這個方法蜕猫,如params="myParam=myValue"
寂曹,也可以用數(shù)組表示params={"myParam0=myValue","myParam1!=myValue"}
headers:請求頭中必須包含某些指定的參數(shù)值,才能讓該方法處理請求回右,如
hearders="contet-type=text/*"
@RequestMapping不僅支持標(biāo)準的URL隆圆,還支持Ant風(fēng)格和帶{xxx}占位符的URL,下面的URL都是合法的:
/user//login:匹配/user/aaa/login翔烁,/user/任意字符/login 等
/user//login:匹配/user/login渺氧, /user/aaa/bbb/login 等
/user/login??:匹配/user/loginAA, /user/loginbb 等
/user/{userId}:匹配/user/123, /user/234 等
/user/*/{userId}:匹配/user/aaa/bbb/123蹬屹,/user/aaa/234等
四大注解類
- @Component 是通用標(biāo)注
- @Controller標(biāo)注web控制器
- @Service標(biāo)注Service層的服務(wù)
- @Respository標(biāo)注DAO層的數(shù)據(jù)訪問
這些注解都是類級別的侣背,可以不帶任何參數(shù),也可以帶一個參數(shù)慨默,代表bean的名字贩耐,在進行注入的時候就可以通過名字進行注入了
在不清楚使用那個注解的時候,可以統(tǒng)統(tǒng)使用Component 业筏。為了代碼邏輯清晰憔杨,還是建議使用具體的注解
@Resource 和@Autowired的異同
@Autowired默認按類型裝配,默認情況下必須要求依賴對象必須存在蒜胖,如果要允許null值,可以設(shè)置它的required屬性為false抛蚤,例如:@Autowired(required=false) 台谢,如果我們想使用名稱裝配可以結(jié)合@Qualifier注解進行使用
@Resource,默認安裝名稱進行裝配岁经,名稱可以通過name屬性進行指定朋沮,如果沒有指定name屬性,當(dāng)注解寫在字段上時缀壤,默認取字段名進行安裝名稱查找樊拓,如果注解寫在setter方法上默認取屬性名進行裝配。當(dāng)找不到與名稱匹配的bean時才按照類型進行裝配塘慕。但是需要注意的是筋夏,如果name屬性一旦指定,就只會按照名稱進行裝配
其他常用注解類
- PathVariable注解類
- RequestParam注解類
- CookieValue注解類
- SessionAttributes注解類
- ResponseBody注解類
- RequestHeader注解類
PathVariable
@RequestMapping注解中使用占位符的情況下图呢,需要使用@PathVariable注解指定占位符參數(shù)
其實就是用路徑里面的參數(shù)復(fù)制給注解后面的變量
RequestParam
在SpringMVC后臺控制層獲取參數(shù)的方式主要有兩種条篷,一種是request.getParameter("name")骗随,另外一種是用注解@RequestParam直接獲取
有三個屬性 value, required赴叹, defaultValue
不帶任何參數(shù)鸿染,表示需要的參數(shù)名與標(biāo)注的變量名相同
可以通過required=false或者true來要求@RequestParam配置的前端參數(shù)是否一定要傳
參數(shù)類型盡量不要使用基本類型int,long等乞巧,而應(yīng)該使用具體的對象類Integer涨椒、Long、String等
就是把request對象中的同名參數(shù)绽媒,賦值給后面的變量
CookieValue
讀取Cookies中的值丢烘,并且賦值給變量
有三個屬性 value, required些椒, defaultValue播瞳,分別表示Cookie的名字,是否必須有這個Cookie值免糕,如果沒有默認值
不帶任何參數(shù)赢乓,表示需要的參數(shù)名與標(biāo)注的變量名相同
SessionAttrinutes
如果希望在多個請求之間公用某個模型屬性數(shù)據(jù),則可以在控制器類標(biāo)注一個@SessionAttributes石窑,Spring MVC會將模型中對應(yīng)的屬性暫存到HttpSerssion中
除了SessionAttributes牌芋,還可以直接用原生態(tài)的request.getSession()來處理session數(shù)據(jù)
ResponseBody
用于將Controller的方法返回的對象,通過適當(dāng)?shù)腍ttpMessageConverter(轉(zhuǎn)換器)轉(zhuǎn)換為指定格式后松逊,寫入到Response對象的body數(shù)據(jù)區(qū)
返回如json躺屁、xml等時使用
在springmvc配置文件中通過<mvc:annotation-driven />,給AnnotationMethodHandlerAdapter初始化7個轉(zhuǎn)換器
用的最多的是轉(zhuǎn)換成xml和json
這里配置文件中property屬性指定了返回xml
RequestHeader
@RequestHeader 注解经宏,可以把Request請求header部分的值綁定到方法的參數(shù)上