J2EE進階(十三)Spring MVC常用的那些注解

      網(wǎng)友投稿 724 2022-05-30

      Spring MVC常用的那些注解

      前言

      Spring從2.5版本開始在編程中引入注解,用戶可以使用@RequestMapping, @RequestParam,@ModelAttribute等等這樣類似的注解。到目前為止,Spring的版本雖然發(fā)生了很大的變化,但注解的特性卻是一直延續(xù)下來,并不斷擴展,讓廣大的開發(fā)人員的雙手變的更輕松起來,這都離不開Annotation的強大作用,今天我們就一起來看看Spring MVC 4中常用的那些注解吧。

      1. @Controller

      Controller控制器是通過服務接口定義的提供訪問應用程序的一種行為,它解釋用戶的輸入,將其轉(zhuǎn)換成一個模型然后將試圖呈獻給用戶。Spring MVC 使用 @Controller定義控制器,它還允許自動檢測定義在類路徑下的組件并自動注冊。如想自動檢測生效,需在XML頭文件下引入 spring-context:

      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

      xmlns:p="http://www.springframework.org/schema/p"

      xmlns:context="http://www.springframework.org/schema/context"

      xsi:schemaLocation="

      http://www.springframework.org/schema/beans

      http://www.springframework.org/schema/beans/spring-beans.xsd

      http://www.springframework.org/schema/context

      http://www.springframework.org/schema/context/spring-context.xsd">

      base-package="org.springframework.samples.petclinic.web"/>

      2. @RequestMapping

      我們可以使用?@RequestMapping 注解將類似“/favsoft”這樣的URL映射到整個類或特定的處理方法上。一般來說,類級別的注解映射特定的請求路徑到表單控制器上,而方法級別的注解只是映射為一個特定的HTTP方法請求(“GET”,“POST”等)或HTTP請求參數(shù)。

      @Controller

      @RequestMapping("/favsoft")

      public class AnnotationController {

      @RequestMapping(method=RequestMethod.GET)

      public String get(){

      return "";

      }

      @RequestMapping(value="/getName", method = RequestMethod.GET)

      public String getName(String userName) {

      return userName;

      }

      @RequestMapping(value="/{day}", method=RequestMethod.GET)

      public String getDay(Date day){

      DateFormat df = new SimpleDateFormat("yyyy-MM-dd");

      return df.format(day);

      }

      @RequestMapping(value="/addUser", method=RequestMethod.GET)

      public String addFavUser(@Validated FavUser favUser,BindingResult result){

      if(result.hasErrors()){

      return "favUser";

      }

      //favUserService.addFavUser(favUser);

      return "redirect:/favlist";

      }

      @RequestMapping("/test")

      @ResponseBody

      public String test(){

      return "aa";

      }

      }

      @RequestMapping 既可以作用在類級別,也可以作用在方法級別。當它定義在類級別時,標明該控制器處理所有的請求都被映射到 /favsoft 路徑下。@RequestMapping中可以使用 method 屬性標記其所接受的方法類型,如果不指定方法類型的話,可以使用 HTTP GET/POST 方法請求數(shù)據(jù),但是一旦指定方法類型,就只能使用該類型獲取數(shù)據(jù)。

      @RequestMapping可以使用@Validated與BindingResult聯(lián)合驗證輸入的參數(shù),在驗證通過和失敗的情況下,分別返回不同的視圖。

      @RequestMapping支持使用URI模板訪問URL。URI模板像是URL模樣的字符串,由一個或多個變量名字組成,當這些變量有值的時候,它就變成了URI。

      3.@PathVariable

      在Spring MVC中,可以使用 @PathVariable 注解方法參數(shù)并將其綁定到URI模板變量的值上。如下代碼所示:

      String findOwner( String , Model model) {

      FavUser favUser = favUserService.findFavUser();

      model.addAttribute(

      ;

      }

      URI模板“favusers/{favUserId}"指定變量的名字 favUserId,當控制器處理這個請求的時候,favUserId的值會被設定到URI中。比如,當有一個像“favusers/favccxx”這樣的請求時,favUserId的值就是 favccxx。

      @PathVariable 可以有多個注解,像下面這樣:

      @RequestMapping(value="/owners/{ownerId}/pets/{petId}", method=RequestMethod.GET)

      public String findPet(@PathVariable String ownerId, @PathVariable String petId, Model model) {

      Owner owner = ownerService.findOwner(ownerId);

      Pet pet = owner.getPet(petId);

      model.addAttribute("pet", pet);

      return "displayPet";

      }

      @PathVariable中的參數(shù)可以是任意的簡單類型,如int,long,Date等等。Spring會自動將其轉(zhuǎn)換成合適的類型或者拋出 TypeMismatchException異常。當然,我們也可以注冊支持額外的數(shù)據(jù)類型。

      如果@PathVariable使用Map類型的參數(shù)時, Map會填充到所有的URI模板變量中。

      @PathVariable支持使用正則表達式,這就決定了它的超強大屬性,它能在路徑模板中使用占位符,可以設定特定的前綴匹配,后綴匹配等自定義格式。

      @PathVariable還支持矩陣變量,因為現(xiàn)實場景中用的不多,這就不詳細介紹了,有需要的童鞋請查看官網(wǎng)的文檔。

      4.@RequestParam

      @RequestParam將請求的參數(shù)綁定到方法中的參數(shù)上,如下面的代碼所示。其實,即使不配置該參數(shù),注解也會默認使用該參數(shù)。如果想自定義指定參數(shù)的話,可以將RequestParam的required屬性設置為false。(如@RequestParam(value="id",required=false))。

      5.@RequestBody

      @RequestBody是指方法參數(shù)應該被綁定到HTTP請求Body上。

      @RequestMapping(value = "/something", method = RequestMethod.PUT)

      public void handle(@RequestBody String body, Writer writer) throws IOException {

      writer.write(body);

      }

      如果覺得@RequestBody不如@RequestParam趁手,我們可以使用 HttpMessageConverter將request的body轉(zhuǎn)移到方法參數(shù)上, HttMessageConverser將 HTTP請求消息在Object對象之間互相轉(zhuǎn)換,但一般情況下不會這么做。事實證明,@RequestBody在構(gòu)建REST架構(gòu)時,比@RequestParam有著更大的優(yōu)勢。

      6.@ResponseBody

      @ResponseBody與@RequestBody類似,它的作用是將返回類型直接輸入到HTTP response body中。@ResponseBody在輸出JSON格式的數(shù)據(jù)時,會經(jīng)常用到,代碼見下:

      @RequestMapping(value="/something", method=RequestMethod.PUT)

      @ResponseBody

      Public String helloWorld() {

      return "Hello World";

      }

      7.@RestController

      我們經(jīng)常見到一些控制器實現(xiàn)了REST的API,只為服務于JSON,XML或其它自定義的類型內(nèi)容,@RestController用來創(chuàng)建REST類型的控制器。@RestController就是這樣一種類型,它避免了你重復的寫@RequestMapping與@ResponseBody。

      @RestController

      J2EE進階(十三)Spring MVC常用的那些注解

      public class FavRestfulController {

      @RequestMapping(value="/getUserName",method=RequestMethod.POST)

      public String getUserName(@RequestParam(value="name") String name){

      return name;

      }

      }

      8.HttpEntity

      HttpEntity除了能獲得request請求和response響應之外,它還能訪問請求和響應頭,如下所示:

      @RequestMapping("/something")

      public ResponseEntity handle(HttpEntity requestEntity) throws UnsupportedEncodingException {

      String requestHeader =

      requestEntity.getHeaders().getFirst("MyRequestHeader"));

      byte[] requestBody = requestEntity.getBody();

      // do something with request header and body

      HttpHeaders responseHeaders = new HttpHeaders();

      responseHeaders.set("MyResponseHeader", "MyValue");

      return new ResponseEntity("Hello World", responseHeaders, HttpStatus.CREATED);

      }

      9.@ModelAttribute

      @ModelAttribute可以作用在方法或方法參數(shù)上,當它作用在方法上時,標明該方法的目的是添加一個或多個模型屬性(model attributes)。該方法支持與@RequestMapping一樣的參數(shù)類型,但并不能直接映射成請求。控制器中的@ModelAttribute方法會在@RequestMapping方法調(diào)用之前而調(diào)用,示例如下:

      @ModelAttribute

      public Account addAccount(@RequestParam String number) {

      return accountManager.findAccount(number);

      }

      @ModelAttribute

      public void populateModel(@RequestParam String number, Model model) {

      model.addAttribute(accountManager.findAccount(number));

      // add more ...

      }

      @ModelAttribute方法用來在model中填充屬性,如填充下拉列表、寵物類型或檢索一個命令對象比如賬戶(用來在HTML表單上呈現(xiàn)數(shù)據(jù))。

      @ModelAttribute方法有兩種風格:一種是添加隱形屬性并返回它。另一種是該方法接受一個模型并添加任意數(shù)量的模型屬性。用戶可以根據(jù)自己的需要選擇對應的風格。

      @ModelAttribute作用在方法參數(shù)上

      當@ModelAttribute作用在方法參數(shù)上時,表明該參數(shù)可以在方法模型中檢索到。如果該參數(shù)不在當前模型中,該參數(shù)先被實例化然后添加到模型中。一旦模型中有了該參數(shù),該參數(shù)的字段應該填充所有請求參數(shù)匹配的名稱中。這是Spring MVC中重要的數(shù)據(jù)綁定機制,它省去了單獨解析每個表單字段的時間。

      @ModelAttribute是一種很常見的從數(shù)據(jù)庫中檢索屬性的方法,它通過@SessionAttributes使用request請求存儲。在一些情況下,可以很方便的通過URI模板變量和類型轉(zhuǎn)換器檢索屬性。

      注解的出現(xiàn)終結(jié)了XML配置文件漫天飛的年代,它讓程序擁有更高的可讀性,可配置性與靈活性。當然,也有一些人說注解不如配置文件顯的結(jié)構(gòu)清晰,個人覺得所謂的結(jié)構(gòu)應該是一個統(tǒng)一的規(guī)范,而不是將一堆文件結(jié)構(gòu)糅合在一起。這就好比是面向?qū)ο笈c面向結(jié)構(gòu),你能說面向?qū)ο蟮倪壿嫴磺逦鷨幔?/p>

      美文美圖

      MVC Spring

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔相應法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:實現(xiàn)微信小程序編譯和運行環(huán)境系列 (核心篇二)
      下一篇:Apache公共網(wǎng)絡程序庫可行性替換研究
      相關文章
      国产亚洲精品自在线观看| 亚洲不卡视频在线观看| 一本色道久久88亚洲精品综合| 久久综合日韩亚洲精品色| 国产亚洲av片在线观看18女人| 国产精品亚洲av色欲三区| 亚洲日本天堂在线| 亚洲欧美国产欧美色欲| 亚洲国产日韩综合久久精品| 亚洲人成77777在线观看网| 亚洲不卡视频在线观看| 亚洲一区二区三区在线观看蜜桃| 亚洲成av人片在线看片| 亚洲制服丝袜精品久久| ww亚洲ww在线观看国产| 久久亚洲精品国产精品婷婷| 四虎亚洲精品高清在线观看| 亚洲午夜无码久久久久小说| 亚洲综合色婷婷在线观看| 亚洲欧美日韩中文字幕在线一区| 亚洲色成人网站WWW永久四虎| 亚洲精品av无码喷奶水糖心| 亚洲AV日韩AV无码污污网站| 午夜亚洲国产成人不卡在线| 国产99久久亚洲综合精品| 亚洲日韩中文字幕日韩在线| 在线观看亚洲精品福利片| 亚洲日韩精品A∨片无码| 国产AV无码专区亚洲AVJULIA| 亚洲成熟xxxxx电影| 久久久久久久亚洲Av无码| 亚洲国产成人久久精品app| 国产精品亚洲自在线播放页码| 亚洲精品永久在线观看| 五月婷婷亚洲综合| 亚洲三区在线观看无套内射| 久久伊人久久亚洲综合| 亚洲天堂福利视频| 亚洲人成网站免费播放| 亚洲国产高清精品线久久| 亚洲人精品午夜射精日韩|