摘要:方法上的注解對請求路徑進行了進一步細化它僅接受方法的請求。這種情況下,一個路徑為方法為的請求將會被這個方法所處理。類級別的注解并不是必須的。如果僅想接收某種請求方法,請在注解中指定之以縮小范圍。
前言
以下部分內容來自官方文檔
文檔描述
@Controller
使用@Controller注解定義一個控制器,@Controller注解表明了一個類是作為控制器的角色而存在的。Spring不要求你去繼承任何控制器基類,也不要求你去實現Servlet的那套API。上一節講的DispatcherServlet會掃描所有注解了@Controller的類,檢測其中通過@RequestMapping注解配置的方法。
@RequestMapping
你可以使用@RequestMapping注解來將請求URL,如/appointments等,映射到整個類上或某個特定的處理器方法上。一般來說,類級別的注解負責將一個特定(或符合某種模式)的請求路徑映射到一個控制器上,同時通過方法級別的注解來細化映射,即根據特定的HTTP請求方法(“GET”“POST”方法等)、HTTP請求中是否攜帶特定參數等條件,將請求映射到匹配的方法上。
@Controller @RequestMapping("/appointments") public class AppointmentsController { private final AppointmentBook appointmentBook; @Autowired public AppointmentsController(AppointmentBook appointmentBook) { this.appointmentBook = appointmentBook; } @RequestMapping(method = RequestMethod.GET) public Mapget() { return appointmentBook.getAppointmentsForToday(); } @RequestMapping(path = "/{day}", method = RequestMethod.GET) public Map getForDay(@PathVariable @DateTimeFormat(iso=ISO.DATE) Date day, Model model) { return appointmentBook.getAppointmentsForDay(day); } @RequestMapping(path = "/new", method = RequestMethod.GET) public AppointmentForm getNewForm() { return new AppointmentForm(); } @RequestMapping(method = RequestMethod.POST) public String add(@Valid AppointmentForm appointment, BindingResult result) { if (result.hasErrors()) { return "appointments/new"; } appointmentBook.addAppointment(appointment); return "redirect:/appointments"; } }
在上面的示例中,許多地方都使用到了@RequestMapping注解。url模板
1) 第一次使用點是作用于類級別的,它指示了所有/appointments開頭的路徑都會被映射到控制器下。
2) get()方法上的@RequestMapping注解對請求路徑進行了進一步細化:它僅接受GET方法的請求。這樣,一個請求路徑為/appointments、HTTP方法為GET的請求,將會最終進入到這個方法被處理。
3) add()方法也做了類似的細化,而getNewForm()方法則同時注解了能夠接受的請求的HTTP方法和路徑。這種情況下,一個路徑為appointments/new、HTTP方法為GET的請求將會被這個方法所處理。
4) 類級別的@RequestMapping注解并不是必須的。
5) 不配置的話則所有的路徑都是絕對路徑,而非相對路徑。@RequestMapping注解默認會映射所有的HTTP請求方法。如果僅想接收某種請求方法,請在注解中指定之@RequestMapping(method=GET)以縮小范圍。
6) getForDay()方法則展示了使用@RequestMapping注解的另一個技巧:URI模板。(下面會講到)
URI模板可以為快速訪問@RequestMapping中指定的URL的一個特定的部分提供很大的便利。URI模板是一個類似于URI的字符串,只不過其中包含了一個或多個的變量名。當你使用實際的值去填充這些變量名的時候,模板就退化成了一個URI。在URI模板的RFC提議中定義了一個URI是如何進行參數化的。比如說,一個這個URI模板http://www.example.com/users/{userId}就包含了一個變量名userId。將值fred賦給這個變量名后,它就變成了一個URI:http://www.example.com/users/...。在Spring MVC中你可以在方法參數上使用@PathVariable注解,將其與URI模板中的參數綁定起來:
public String findOwner(@PathVariable String ownerId, Model model) { Owner owner = ownerService.findOwner(ownerId); model.addAttribute("owner", owner); return "displayOwner"; }
URI模板"/owners/{ownerId}"指定了一個變量,名為ownerId。當控制器處理這個請求的時候,ownerId的值就會被URI模板中對應部分的值所填充。比如說,如果請求的URI是/owners/fred,此時變量ownerId的值就是fred.
或者也可以在注解中聲明,然后使用別名的參數名:
@RequestMapping(path="/owners/{ownerId}}", method=RequestMethod.GET) public String findOwner(@PathVariable("ownerId") String theOwner, Model model) { // 具體的方法代碼… }
一個方法可以擁有任意數量的@PathVariable注解:
@RequestMapping(path="/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"; }
URI模板可以從類級別和方法級別的 @RequestMapping 注解獲取數據。因此,像這樣的findPet()方法可以被類似于/owners/42/pets/21這樣的URL路由并調用到:
_@Controller_ @RequestMapping("/owners/{ownerId}") public class RelativePathUriTemplateController { @RequestMapping("/pets/{petId}") public void findPet(_@PathVariable_ String ownerId, _@PathVariable_ String petId, Model model) { // 方法實現體這里忽略 } }
@PathVariable可以被應用于所有 簡單類型 的參數上,比如int、long、Date等類型。Spring會自動地幫你把參數轉化成合適的類型,如果轉換失敗,就拋出一個TypeMismatchException。如果你需要處理其他數據類型的轉換,也可以注冊自己的類。同時你也可以學習帶正則表達式的URL模板。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/68306.html
摘要:概述上篇文章主要分析了提供的及抽象類,本章繼續分析其具體的幾個實現類。源碼由繼承關系繼承抽象類,并實現模板方法,完成將接收的請求進行轉發,源碼如下實現父類模板方法獲取部署文件中定義的,傳入參數。 概述 上篇文章主要分析了Spring提供的Controller及抽象類AbstractController,本章繼續分析其具體的幾個實現類。 本系列文章是基于Spring5.0.5RELEAS...
摘要:概述上篇學習了視圖解析器作用及處理流程,為我們提供了豐富的視圖解析器見下圖本系列文章是基于。該視圖解析器是根據處理器返回的邏輯視圖名稱,在應用上下文中查找該名稱的視圖對象視圖對象就是的對象。 概述 上篇學習了Spring MVC ViewResolver視圖解析器作用及處理流程,Spring為我們提供了豐富的視圖解析器(見下圖):showImg(https://segmentfault...
摘要:分發處理器將會掃描使用了該注解的類的方法,并檢測該方法是否使用了注解。這種絕對路徑和相對路徑所組合成的最終路徑都是相對于根路徑而言的。屬性屬性主要是用于限制能夠訪問的方法類型的。屬性的用法和功能與屬性相似。使用標記的參數。 一、簡介 在SpringMVC 中,控制器Controller 負責處理由DispatcherServlet 分發的請求,它把用戶請求的數據經過業務處理層處理之后封...
摘要:為了能夠處理中文的請求,再配置一個,以避免請求中文出現亂碼情況至此,配置完畢。一般為一些基本的,用于進行相應的頁面顯示,用于處理網站的請求。現在,需要配置來運行該項目。 摘要講解如何配置SpringMVC框架xml,以及如何在Tomcat中運行轉載請注明出處:Gaussic(一個致力于AI研究卻不得不兼顧項目的研究生)。 注:此文承接上一文:使用IntelliJ IDEA開發Sprin...
摘要:簡介注解用于修飾的方法,根據的的內容,通過適當的轉換為客戶端需要格式的數據并且寫入到的數據區,從而不通過視圖解析器直接將數據響應給客戶端。并且這些解析器都實現了接口,在接口中有四個最為主要的接口方法。 SpringMVC 細節方面的東西很多,所以在這里做一篇簡單的 SpringMVC 的筆記記錄,方便以后查看。 Spring MVC是當前最優秀的MVC框架,自從Spring 2.5版本...
閱讀 3644·2021-11-25 09:43
閱讀 642·2021-09-22 15:59
閱讀 1748·2021-09-06 15:00
閱讀 1771·2021-09-02 09:54
閱讀 693·2019-08-30 15:56
閱讀 1183·2019-08-29 17:14
閱讀 1843·2019-08-29 13:15
閱讀 885·2019-08-28 18:28