




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 SpringMVC中常用的注解 spring從2.5版本開(kāi)始在編程中引入注解,用戶(hù)可以使用RequestMapping, RequestParam, ModelAttribute等等這樣類(lèi)似的注解。到目前為止,Spring的版本雖然發(fā)生了很大的變化,但注解的特性卻是一直延續(xù)下來(lái),并不斷擴(kuò)展,讓廣大的開(kāi)發(fā)人員的雙手變的更輕松起來(lái),這都離不開(kāi)Annotation的強(qiáng)大作用,今天我們就一起來(lái)看看Spring MVC 4中常用的那些注解吧。 1. Controller Controll
2、er控制器是通過(guò)服務(wù)接口定義的提供訪(fǎng)問(wèn)應(yīng)用程序的一種行為,它解釋用戶(hù)的輸入,將其轉(zhuǎn)換成一個(gè)模型然后將試圖呈獻(xiàn)給用戶(hù)。Spring MVC 使用 Controller 定義控制器,它還允許自動(dòng)檢測(cè)定義在類(lèi)路徑下的組件并自動(dòng)注冊(cè)。如想自動(dòng)檢測(cè)生效,需在XML頭文件下引入 spring-context:12345678910111213<?xml version="1.0" encoding="UTF-8"?><beans xmlns="/sch
3、ema/beans" xmlns:xsi="/2001/XMLSchema-instance" xmlns:p="/schema/p" xmlns:context="/schema/context"
4、;xsi:schemaLocation=" /schema/beans /schema/beans/spring-beans.xsd
5、/schema/context /schema/context/spring-context.xsd"> <context:component-scan base-package="org.springframework.samples.petclinic.web"/> &
6、lt;!- . -></beans> 2. RequestMapping 我們可以 RequestMapping 注解將類(lèi)似 “/favsoft”這樣的URL映射到整個(gè)類(lèi)或特定的處理方法上。一般來(lái)說(shuō),類(lèi)級(jí)別的注解映射特定的請(qǐng)求路徑到表單控制器上,而方法級(jí)別的注解只是映射為一個(gè)特定的HTTP方法請(qǐng)求(“GET”,“POST”等)或HTTP請(qǐng)求參數(shù)。 1234567891011121314151617181920212223242526272829303132333
7、43536ControllerRequestMapping("/favsoft")public class AnnotationController RequestMapping(method=RequestMethod.GET) public String get() retur
8、n "" RequestMapping(value="/getName", method = RequestMethod.GET) public String getName(String userName)
9、; return userName; RequestMapping(value="/day", method=RequestMethod.GET) public String getDay(Date day) Da
10、teFormat df = new SimpleDateFormat("yyyy-MM-dd"); return df.format(day); RequestMapping(value="/addUser", method=RequestMethod
11、.GET) public String addFavUser(Validated FavUser favUser,BindingResult result) if(result.hasErrors() return "favUser"
12、160; /favUserService.addFavUser(favUser); return "redirect:/favlist" RequestMapping("/test&
13、quot;) ResponseBody public String test() return "aa" RequestMapping 既可以作用在類(lèi)級(jí)別,也可以作用在方法級(jí)別。當(dāng)它定義在類(lèi)級(jí)別時(shí),標(biāo)明該控制器處理所有
14、的請(qǐng)求都被映射到 /favsoft 路徑下。RequestMapping中可以使用 method 屬性標(biāo)記其所接受的方法類(lèi)型,如果不指定方法類(lèi)型的話(huà),可以使用 HTTP GET/POST 方法請(qǐng)求數(shù)據(jù),但是一旦指定方法類(lèi)型,就只能使用該類(lèi)型獲取數(shù)據(jù)。 RequestMapping 可以使用 Validated與BindingResult聯(lián)合驗(yàn)證輸入的參數(shù),在驗(yàn)證通過(guò)和失敗的情況下,分別返回不同的視圖。 RequestMapping支持使用URI模板訪(fǎng)問(wèn)URL。URI模板像是URL模樣的字符串,由一個(gè)或多個(gè)變量名字組成,
15、當(dāng)這些變量有值的時(shí)候,它就變成了URI。 3. PathVariable 在Spring MVC中,可以使用 PathVariable 注解方法參數(shù)并將其綁定到URI模板變量的值上。如下代碼所示: String findOwner( String , Model model) FavUser favUser = favUserService.findFavUser();
16、60; model.addAttribute( URI模板 “favusers/favUserId"指定變量的名字 favUserId ,當(dāng)控制器處理這個(gè)請(qǐng)求的時(shí)候, favUserId的值會(huì)被設(shè)定到URI中。比如,當(dāng)有一個(gè)像“favusers/favccxx”這樣的請(qǐng)求時(shí),favUserId的值就是 favccxx。 PathVariable 可以有多個(gè)注解,像下面這樣: RequestMapping(value=&qu
17、ot;/owners/ownerId/pets/petId", method=RequestMethod.GET)public String findPet(PathVariable String ownerId, PathVariable String petId, Model model) Owner owner = ownerService.findOwner(ownerId); &
18、#160; Pet pet = owner.getPet(petId); model.addAttribute("pet", pet); return "displayPet" PathVariable中的參數(shù)可以是任意的簡(jiǎn)單類(lèi)型,如int, long, Date等等。Spring會(huì)自動(dòng)將其轉(zhuǎn)換成合適
19、的類(lèi)型或者拋出 TypeMismatchException異常。當(dāng)然,我們也可以注冊(cè)支持額外的數(shù)據(jù)類(lèi)型。 如果PathVariable使用Map<String, String>類(lèi)型的參數(shù)時(shí), Map會(huì)填充到所有的URI模板變量中。 PathVariable支持使用正則表達(dá)式,這就決定了它的超強(qiáng)大屬性,它能在路徑模板中使用占位符,可以設(shè)定特定的前綴匹配,后綴匹配等自定義格式。 PathVariable還支持矩陣變量,因?yàn)楝F(xiàn)實(shí)場(chǎng)景中用的不多,這就不詳細(xì)介紹了,有
20、需要的童鞋請(qǐng)查看官網(wǎng)的文檔。 4. RequestParam RequestParam將請(qǐng)求的參數(shù)綁定到方法中的參數(shù)上,如下面的代碼所示。其實(shí),即使不配置該參數(shù),注解也會(huì)默認(rèn)使用該參數(shù)。如果想自定義指定參數(shù)的話(huà),如果將RequestParam的 required 屬性設(shè)置為false(如RequestParam(value="id",required=false)。 5. RequestBody &
21、#160; RequestBody是指方法參數(shù)應(yīng)該被綁定到HTTP請(qǐng)求Body上。 RequestMapping(value = "/something", method = RequestMethod.PUT)public void handle(RequestBody String body, Writer writer) throws IOException writer.
22、write(body); 如果覺(jué)得RequestBody不如RequestParam趁手,我們可以使用 HttpMessageConverter將request的body轉(zhuǎn)移到方法參數(shù)上, HttMessageConverser將 HTTP請(qǐng)求消息在Object對(duì)象之間互相轉(zhuǎn)換,但一般情況下不會(huì)這么做。事實(shí)證明,RequestBody在構(gòu)建REST架構(gòu)時(shí),比RequestParam有著更大的優(yōu)勢(shì)。 6. ResponseBody ResponseBody與RequestBod
23、y類(lèi)似,它的作用是將返回類(lèi)型直接輸入到HTTP response body中。ResponseBody在輸出JSON格式的數(shù)據(jù)時(shí),會(huì)經(jīng)常用到,代碼見(jiàn)下圖: RequestMapping(value = "/something", method = RequestMethod.PUT)ResponseBodypublic String helloWorld() return "Hello World"
24、 7. RestController 我們經(jīng)常見(jiàn)到一些控制器實(shí)現(xiàn)了REST的API,只為服務(wù)于JSON,XML或其它自定義的類(lèi)型內(nèi)容,RestController用來(lái)創(chuàng)建REST類(lèi)型的控制器,與Controller類(lèi)型。RestController就是這樣一種類(lèi)型,它避免了你重復(fù)的寫(xiě)RequestMapping與ResponseBody。 RestControllerpublic class FavRestfulController RequestMapping
25、(value="/getUserName",method=RequestMethod.POST)public String getUserName(RequestParam(value="name") String name)return name; 8. HttpEntity HttpEntity除了能獲得request請(qǐng)求和response響應(yīng)之外,它還能訪(fǎng)問(wèn)請(qǐng)求和響應(yīng)頭,如下所示: RequestMapping("/something"
26、;)public ResponseEntity<String> handle(HttpEntity<byte> requestEntity) throws UnsupportedEncodingException String requestHeader = requestEntity.getHeaders().getFirst("MyRequestHeader");
27、byte requestBody = requestEntity.getBody(); / do something with request header and body HttpHeaders responseHeaders = new HttpHeaders(); responseHeaders.set(&quo
28、t;MyResponseHeader", "MyValue"); return new ResponseEntity<String>("Hello World", responseHeaders, HttpStatus.CREATED); 9. ModelAttribute ModelAttribute可以作用在方法或方法參數(shù)
29、上,當(dāng)它作用在方法上時(shí),標(biāo)明該方法的目的是添加一個(gè)或多個(gè)模型屬性(model attributes)。該方法支持與RequestMapping一樣的參數(shù)類(lèi)型,但并不能直接映射成請(qǐng)求??刂破髦械腗odelAttribute方法會(huì)在RequestMapping方法調(diào)用之前而調(diào)用,示例如下: ModelAttributepublic Account addAccount(RequestParam String number) return accountManager.findAccount(nu
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣東初升高期末數(shù)學(xué)試卷
- 2025年河北石家莊市中醫(yī)醫(yī)院公開(kāi)招聘藥劑師6名筆試歷年專(zhuān)業(yè)考點(diǎn)(難、易錯(cuò)點(diǎn))附帶答案詳解
- 2025至2030城市交通控制行業(yè)市場(chǎng)深度研究及發(fā)展前景投資可行性分析報(bào)告
- 甘肅公務(wù)員行測(cè)(A類(lèi))真題及答案
- 北京腫瘤醫(yī)院社會(huì)人員招聘考試真題2024
- 2025至2030草本化妝品行業(yè)市場(chǎng)深度研究與戰(zhàn)略咨詢(xún)分析報(bào)告
- 2025至2030采礦采石行業(yè)市場(chǎng)占有率及投資前景評(píng)估規(guī)劃報(bào)告
- 福清市蓮峰小學(xué)數(shù)學(xué)試卷
- 二年級(jí)設(shè)計(jì)數(shù)學(xué)試卷
- 廣東河源小升初數(shù)學(xué)試卷
- 沉淀法白炭黑的性能與運(yùn)用課件
- 勝任力調(diào)查問(wèn)卷
- 李善友顛覆式創(chuàng)新課件
- 商業(yè)租戶(hù)招商營(yíng)運(yùn)一戶(hù)一檔移交資料清單
- 分包單位過(guò)程施工進(jìn)度款審批表
- 電白局設(shè)備采購(gòu)4開(kāi)標(biāo)過(guò)程評(píng)標(biāo)報(bào)告
- 比和比例綜合練習(xí)題及答案-
- 小學(xué)古詩(shī)詞大賽-九宮格練習(xí)課件
- 醫(yī)院(診所)門(mén)診病人登記簿表格模板
- 淺析如何提高高職院校行政管理效率2100字
- 上海電動(dòng)汽車(chē)充電設(shè)施建設(shè)管理暫行規(guī)定
評(píng)論
0/150
提交評(píng)論