欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

spring mvc常用注解_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

 更新時(shí)間:2017年08月30日 10:19:12   作者:aijuans  
這篇文章主要介紹了spring mvc常用注解,詳細(xì)的介紹了@RequestMapping, @RequestParam, @ModelAttribute等等這樣類似的注解,有興趣的可以了解一下

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

1. @Controller

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

 <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"
  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">
 
  <context:component-scan base-package="org.springframework.samples.petclinic.web"/>
 
  <!-- ... --></beans>

2. @RequestMapping

我們可以 @RequestMapping 注解將類似 “/favsoft”這樣的URL映射到整個(gè)類或特定的處理方法上。一般來(lái)說(shuō),類級(jí)別的注解映射特定的請(qǐng)求路徑到表單控制器上,而方法級(jí)別的注解只是映射為一個(gè)特定的HTTP方法請(qǐng)求(“GET”,“POST”等)或HTTP請(qǐng)求參數(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 既可以作用在類級(jí)別,也可以作用在方法級(jí)別。當(dāng)它定義在類級(jí)別時(shí),標(biāo)明該控制器處理所有的請(qǐng)求都被映射到 /favsoft 路徑下。@RequestMapping中可以使用 method 屬性標(biāo)記其所接受的方法類型,如果不指定方法類型的話,可以使用 HTTP GET/POST 方法請(qǐng)求數(shù)據(jù),但是一旦指定方法類型,就只能使用該類型獲取數(shù)據(jù)。

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

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

3. @PathVariable

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

 String findOwner( String , Model model) {
  FavUser favUser = favUserService.findFavUser();
  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="/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ù)可以是任意的簡(jiǎn)單類型,如int, long, Date等等。Spring會(huì)自動(dòng)將其轉(zhuǎn)換成合適的類型或者拋出 TypeMismatchException異常。當(dāng)然,我們也可以注冊(cè)支持額外的數(shù)據(jù)類型。

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

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

@PathVariable還支持矩陣變量,因?yàn)楝F(xiàn)實(shí)場(chǎng)景中用的不多,這就不詳細(xì)介紹了,有需要的童鞋請(qǐng)查看官網(wǎng)的文檔。

4. @RequestParam

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

5. @RequestBody

@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.write(body);
}

如果覺得@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與@RequestBody類似,它的作用是將返回類型直接輸入到HTTP response body中。@ResponseBody在輸出JSON格式的數(shù)據(jù)時(shí),會(huì)經(jīng)常用到,代碼見下圖:

@RequestMapping(value = "/something", method = RequestMethod.PUT)@ResponseBodypublic String helloWorld() {  return "Hello World";
}

7. @RestController

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

@RestController
public class FavRestfulController {
 
@RequestMapping(value="/getUserName",method=RequestMethod.POST)
public String getUserName(@RequestParam(value="name") String name){
return name;
}
}

8. HttpEntity

HttpEntity除了能獲得request請(qǐng)求和response響應(yīng)之外,它還能訪問請(qǐng)求和響應(yīng)頭,如下所示:

@RequestMapping("/something")public ResponseEntity<String> handle(HttpEntity<byte[]> 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<String>("Hello World", responseHeaders, HttpStatus.CREATED);
}

9. @ModelAttribute

@ModelAttribute可以作用在方法或方法參數(shù)上,當(dāng)它作用在方法上時(shí),標(biāo)明該方法的目的是添加一個(gè)或多個(gè)模型屬性(model attributes)。該方法支持與@RequestMapping一樣的參數(shù)類型,但并不能直接映射成請(qǐng)求??刂破髦械腀ModelAttribute方法會(huì)在@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方法用來(lái)在model中填充屬性,如填充下拉列表、寵物類型或檢索一個(gè)命令對(duì)象比如賬戶(用來(lái)在HTML表單上呈現(xiàn)數(shù)據(jù))。

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

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

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

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

相關(guān)文章

  • Java設(shè)計(jì)模塊系列之書店管理系統(tǒng)單機(jī)版(二)

    Java設(shè)計(jì)模塊系列之書店管理系統(tǒng)單機(jī)版(二)

    這篇文章主要為大家詳細(xì)介紹了Java單機(jī)版的書店管理系統(tǒng)設(shè)計(jì)模塊和思想第二章,感興趣的小伙伴們可以參考一下
    2016-08-08
  • 猜你不知道Spring Boot的幾種部署方式(小結(jié))

    猜你不知道Spring Boot的幾種部署方式(小結(jié))

    這篇文章主要介紹了猜你不知道Spring Boot的幾種部署方式(小結(jié)),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • SpringBoot2.3整合redis緩存自定義序列化的實(shí)現(xiàn)

    SpringBoot2.3整合redis緩存自定義序列化的實(shí)現(xiàn)

    這篇文章主要介紹了SpringBoot2.3整合redis緩存自定義序列化的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • 在啟動(dòng)后臺(tái) jar包時(shí),使用指定的 application.yml操作

    在啟動(dòng)后臺(tái) jar包時(shí),使用指定的 application.yml操作

    這篇文章主要介紹了在啟動(dòng)后臺(tái) jar包時(shí),使用指定的 application.yml操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2020-10-10
  • Java 使用 FFmpeg 處理視頻文件示例代碼詳解

    Java 使用 FFmpeg 處理視頻文件示例代碼詳解

    這篇文章主要介紹了Java 使用 FFmpeg 處理視頻文件示例代碼,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-02-02
  • Springboot使用異步請(qǐng)求提高系統(tǒng)的吞吐量詳解

    Springboot使用異步請(qǐng)求提高系統(tǒng)的吞吐量詳解

    這篇文章主要介紹了Springboot使用異步請(qǐng)求提高系統(tǒng)的吞吐量詳解,和同步請(qǐng)求相對(duì),異步不需要等待響應(yīng),隨時(shí)可以發(fā)送下一次請(qǐng)求,如果是同步請(qǐng)求,需要將信息填寫完整,再發(fā)送請(qǐng)求,服務(wù)器響應(yīng)填寫是否正確,再做修改,需要的朋友可以參考下
    2023-08-08
  • Spring的IOC代碼解析

    Spring的IOC代碼解析

    這篇文章主要介紹了Spring的IOC代碼解析,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-12-12
  • Java中的FileInputStream 和 FileOutputStream 介紹_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    Java中的FileInputStream 和 FileOutputStream 介紹_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    FileInputStream 是文件輸入流,它繼承于InputStream。FileOutputStream 是文件輸出流,它繼承于OutputStream。接下來(lái)通過本文給大家介紹Java中的FileInputStream 和 FileOutputStream,需要的朋友可以參考下
    2017-05-05
  • 解決IDEA 2020.3 lombok失效問題

    解決IDEA 2020.3 lombok失效問題

    這篇文章主要介紹了IDEA 2020.3 lombok失效問題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • Java信號(hào)量全解析

    Java信號(hào)量全解析

    這篇文章主要介紹了Java信號(hào)量的相關(guān)資料,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2021-01-01

最新評(píng)論