首頁 Java java教程 介紹spring mvc中常用的註解方法

介紹spring mvc中常用的註解方法

Sep 08, 2017 am 09:47 AM
spring 註解 用的

這篇文章主要介紹了spring mvc常用註解,詳細的介紹了@RequestMapping, @RequestParam, @ModelAttribute等等這樣類似的註解,有興趣的可以了解一下

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

1. @Controller

Controller控制器是透過服務介面定義的提供存取應用程式的一種行為,它解釋使用者的輸入,將其轉換成模型然後將試圖呈獻給使用者。 Spring MVC 使用 @Controller 定義控制器,它還允許自動偵測定義在類別路徑下的元件並自動註冊。如想自動偵測生效,需在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對應到整個類別或特定的處理方法上。一般來說,類別層級的註解會對應特定的請求路徑到表​​單控制器上,而方法層級的註解只是對應為一個特定的HTTP方法請求(“GET”,「POST」等)或HTTP請求參數。


@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 方法請求數據,但是一旦指定方法類型,就只能使用該類型獲取數據。

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

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

3. @PathVariable

在Spring MVC中,可以使用@PathVariable 註解方法參數並將其綁定到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中的參數可以是任意的簡單型,如int, long, Date等等。 Spring會自動將其轉換成適當的類型或拋出 TypeMismatchException異常。當然,我們也可以註冊支援額外的資料類型。

如果@PathVariable使用Map類型的參數時, Map會填入所有的URI模板變數。

@PathVariable支援使用正規表示式,這決定了它的超強大屬性,它能在路徑模板中使用佔位符,可以設定特定的前綴匹配,後綴匹配等自定義格式。 

@PathVariable也支援矩陣變量,因為現實場景中使用的不多,這就不詳細介紹了,有需要的童鞋請查看官網的文檔。

4. @RequestParam

#@RequestParam將請求的參數綁定到方法中的參數上,如下面的程式碼所示。其實,即使不配置該參數,註解也會預設使用該參數。如果想要自訂指定參數的話,如果將@RequestParam的 required 屬性設為false(如@RequestParam(value="id",required=false))。

5. @RequestBody

#@RequestBody是指方法參數應該被綁定到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轉移到方法參數上, HttMessageConverser將HTTP請求訊息在Object物件之間互相轉換,但一般情況下不會這麼做。事實證明,@RequestBody在建構REST架構時,比@RequestParam有著更大的優勢。

6. @ResponseBody

@ResponseBody與@RequestBody類似,它的作用是將回傳類型直接輸入到HTTP response body中。 @ResponseBody在輸出JSON格式的資料時,會常用到,程式碼見下圖:


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

7. @RestController

我们经常见到一些控制器实现了REST的API,只为服务于JSON,XML或其它自定义的类型内容,@RestController用来创建REST类型的控制器,与@Controller类型。@RestController就是这样一种类型,它避免了你重复的写@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请求和response响应之外,它还能访问请求和响应头,如下所示:


@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可以作用在方法或方法参数上,当它作用在方法上时,标明该方法的目的是添加一个或多个模型属性(model attributes)。该方法支持与@RequestMapping一样的参数类型,但并不能直接映射成请求。控制器中的@ModelAttribute方法会在@RequestMapping方法调用之前而调用,示例如下:


@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表单上呈现数据)。

@ModelAttribute方法有两种风格:一种是添加隐形属性并返回它。另一种是该方法接受一个模型并添加任意数量的模型属性。用户可以根据自己的需要选择对应的风格。

@ModelAttribute作用在方法参数上

当@ModelAttribute作用在方法参数上时,表明该参数可以在方法模型中检索到。如果该参数不在当前模型中,该参数先被实例化然后添加到模型中。一旦模型中有了该参数,该参数的字段应该填充所有请求参数匹配的名称中。这是Spring MVC中重要的数据绑定机制,它省去了单独解析每个表单字段的时间。

@ModelAttribute是一种很常见的从数据库中检索属性的方法,它通过@SessionAttributes使用request请求存储。在一些情况下,可以很方便的通过URI模板变量和类型转换器检索属性。

以上是介紹spring mvc中常用的註解方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1663
14
CakePHP 教程
1420
52
Laravel 教程
1313
25
PHP教程
1266
29
C# 教程
1239
24
編程新範式,當Spring Boot遇上OpenAI 編程新範式,當Spring Boot遇上OpenAI Feb 01, 2024 pm 09:18 PM

2023年,AI技術已成為熱門話題,對各行業產生了巨大影響,程式設計領域尤其如此。人們越來越認識到AI技術的重要性,Spring社群也不例外。隨著GenAI(GeneralArtificialIntelligence)技術的不斷進步,簡化具備AI功能的應用程式的創建變得至關重要和迫切。在這個背景下,"SpringAI"應運而生,旨在簡化開發AI功能應用程式的過程,使其變得簡單直觀,避免不必要的複雜性。透過"SpringAI",開發者可以更輕鬆地建立具備AI功能的應用程序,將其變得更加易於使用和操作

利用Spring Boot以及Spring AI建構生成式人工智慧應用 利用Spring Boot以及Spring AI建構生成式人工智慧應用 Apr 28, 2024 am 11:46 AM

Spring+AI作為行業領導者,透過其強大、靈活的API和先進的功能,為各種行業提供了領先性的解決方案。在本專題中,我們將深入探討Spring+AI在各領域的應用範例,每個案例都將展示Spring+AI如何滿足特定需求,實現目標,並將這些LESSONSLEARNED擴展到更廣泛的應用。希望這個專題能對你有所啟發,更深入地理解和利用Spring+AI的無限可能。 Spring框架在軟體開發領域已經有超過20年的歷史,自SpringBoot1.0版本發布以來已有10年。現在,無人會質疑,Spring

便捷使用PyCharm快捷鍵實現多行註釋 便捷使用PyCharm快捷鍵實現多行註釋 Jan 27, 2024 am 08:02 AM

PyCharm多行註解快速鍵:讓程式碼註解更便捷,需要具體程式碼範例在日常的程式設計工作中,程式碼註解是非常重要的一部分。它不僅可以提高程式碼的可讀性和可維護性,還能幫助其他開發人員理解程式碼的意圖和設計思路。然而,手動添加程式碼註解往往是一項耗時而繁瑣的工作。為了讓我們的程式碼註解更加高效,PyCharm提供了多行註解的快捷鍵。在PyCharm中,我們可以使用Ctrl+/

spring編程式事務有哪些實作方式 spring編程式事務有哪些實作方式 Jan 08, 2024 am 10:23 AM

spring編程式事務的實作方式:1、使用TransactionTemplate;2、使用TransactionCallback和TransactionCallbackWithoutResult;3、使用Transactional註解;4、使用TransactionTemplate和@Transactional結合使用;5、自訂事務管理器。

地理資訊科學專業學生應選擇哪一種電腦 地理資訊科學專業學生應選擇哪一種電腦 Jan 13, 2024 am 08:00 AM

推薦適合地理資訊科學專業學生用的電腦1.推薦2.地理資訊科學專業學生需要處理大量的地理資料和進行複雜的地理資訊分析,因此需要一台性能較強的電腦。一台配置高的電腦可以提供更快的處理速度和更大的儲存空間,並且能夠更好地滿足專業需求。 3.建議選擇一台配備高效能處理器和大容量記憶體的電腦,這樣可以提高資料處理和分析的效率。此外,選擇一台具備較大儲存空間和高解析度顯示器的電腦也能更好地展示地理資料和結果。另外,考慮到地理資訊科學專業學生可能需要進行地理資訊系統(GIS)軟體的開發和編程,選擇一台支援較好的圖形處

Spring如何設定事務隔離級別 Spring如何設定事務隔離級別 Jan 26, 2024 pm 05:38 PM

Spring設定事務隔離等級的方法:1、使用@Transactional註解;2、在Spring設定檔中設定;3、使用PlatformTransactionManager;4、在Java配置類別中設定。詳細介紹:1、使用@Transactional註解,在需要進行事務管理的類別或方法上加入@Transactional註解,並在屬性中設定隔離等級;2、在Spring設定檔等等。

如何在iPhone上為已儲存的密碼添加註釋 如何在iPhone上為已儲存的密碼添加註釋 Feb 28, 2024 pm 07:41 PM

iCloud鑰匙圈可讓您更方便管理密碼,無需依賴記憶或猜測網站或使用者名稱。您可以透過在iCloud鑰匙圈中為應用程式和網站的現有密碼添加註釋來實現這一點。在這篇文章中,我們將說明如何為您儲存在iPhone上的iCloud鑰匙圈中的密碼新增註解。要求您需要滿足一些要求才能在iCloud鑰匙圈中使用這項新功能。運行iOS15.4或更高版本的iPhone密碼儲存在iCloud鑰匙串中的有效AppleID有效的互聯網連接如何為保存的密碼添加註釋毋庸置疑,您應該在iCloudKeychain中存儲一些密

Spring註解大揭秘:常用註解解析 Spring註解大揭秘:常用註解解析 Dec 30, 2023 am 11:28 AM

Spring是一個開源框架,提供了許多註解來簡化和增強Java開發。本文將詳細解釋常用的Spring註解,並提供具體的程式碼範例。 @Autowired:自動組裝@Autowired註解可以用於自動組裝Spring容器中的Bean。當我們在需要依賴的地方使用@Autowired註解時,Spring將會在容器中尋找匹配的Bean並自動注入。範例程式碼如下:@Auto

See all articles