SpringMVC中的@RequestMapping注解解析
1. RequestMapping 概念
SpringMVC使用@RequestMapping注解為控制器指定可以處理哪些 URL 請(qǐng)求。
在控制器的類定義及方法定義處都可標(biāo)注 @RequestMapping。
① 標(biāo)記在類上:提供初步的請(qǐng)求映射信息。相對(duì)于 WEB 應(yīng)用的根目錄
② 標(biāo)記在方法上:提供進(jìn)一步的細(xì)分映射信息。相對(duì)于標(biāo)記在類上的 URL。
若類上未標(biāo)注 @RequestMapping,則方法處標(biāo)記的 URL 相對(duì)于 WEB 應(yīng)用的根目錄 。
作用:DispatcherServlet 截獲請(qǐng)求后,就通過(guò)控制器上 @RequestMapping 提供的映射信息確定請(qǐng)求所 對(duì)應(yīng)的處理方法。
2. RequestMapping源碼
package org.springframework.web.bind.annotation;
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Mapping
public @interface RequestMapping {
String[] value() default {};
RequestMethod[] method() default {};
String[] params() default {};
String[] headers() default {};
String[] consumes() default {};
String[] produces() default {};
}參數(shù)說(shuō)明
- value:定義處理方法的請(qǐng)求的 URL 地址。(重點(diǎn))
- method:定義處理方法的 http method 類型,如 GET、POST 等。(重點(diǎn))
- params:定義請(qǐng)求的 URL 中必須包含的參數(shù)?;蛘卟话承﹨?shù)。(了解)
- headers:定義請(qǐng)求中 Request Headers 必須包含的參數(shù)?;蛘卟话承﹨?shù)。(了解)
3. RequestMapping 用法
@RequestMapping 有兩種標(biāo)注方式,一種是標(biāo)注在類級(jí)別上,一種是標(biāo)注在方法級(jí)別上。標(biāo)注在方法上時(shí),value 表示訪問(wèn)該方法的 URL 地址。標(biāo)注在類上時(shí),value 相當(dāng)于一個(gè)命名空間,即訪問(wèn)該 Controller 下的任意方法都需要帶上這個(gè)命名空間。
value屬性
@Controller
@RequestMapping("/example")
public class ExampleController {
@RequestMapping
public String execute(){
return "example_page";
}
@RequestMapping("/todo")
public String doSomething(){
return "example_todo_page";
}
}- /example.action:執(zhí)行的是 execute() 方法。execute() 方法的 @RequestMapping 注解缺省 value 值,在這種情況下,當(dāng)訪問(wèn)命名空間時(shí)默認(rèn)執(zhí)行的是這個(gè)方法。方法級(jí)別上的 @RequestMapping 標(biāo)注是必須的,否則方法無(wú)法被正確訪問(wèn)。
- /example/todo.action執(zhí)行的是 doSomething() 方法。類級(jí)別上的 @RequestMapping 標(biāo)注不是必須的,在不寫的情況下,方法上定義的 URL 都是絕對(duì)地址,否則,方法上定義的 URL 都是相對(duì)于它所在的 Controller 的。
method屬性
指定請(qǐng)求的method類型,可以接受GET,POST,PUT,DELETE等,默認(rèn)是可以接收GET請(qǐng)求和POST請(qǐng)求
@RequestMapping(value = "/register", method = RequestMethod.GET)
public String register1(){
return "example_register_get_page";
}
@RequestMapping(value = "/register", method = RequestMethod.POST)
public String register2(){
return "example_register_post_page";
} @RequestMapping({"/test02_01","/test02_02"})
public ModelAndView test02(){
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("hello", "test01");
modelAndView.setViewName("hello");
return modelAndView;
}- 可以為多個(gè)方法映射相同的 URI,不同的 http method 類型,Spring MVC 根據(jù)請(qǐng)求的 method 類型是可以區(qū)分開這些方法的。當(dāng) /example/register.action 是以 GET 的方式提交的時(shí)候,Spring MVC 調(diào)用 register1() 來(lái)處理請(qǐng)求;若是以 POST 的方式提交,則調(diào) register2() 來(lái)處理提交的請(qǐng)求。
- method 若是缺省沒(méi)指定,并不是說(shuō)它默認(rèn)只處理 GET 方式的請(qǐng)求,而是它可以處理任何方式的 http method 類型的請(qǐng)求。指定 method 是為了細(xì)化映射 ( 縮小處理方法的映射范圍 ),在 method 沒(méi)有指定的情況下,它的映射范圍是最大的。
params屬性
params:指定request中必須包含某些參數(shù)值,才讓該方法處理
@RequestMapping(value = "/test04",params = "id")
public ModelAndView test04(){
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("hello", "test04");
modelAndView.setViewName("hello");
return modelAndView;
}
請(qǐng)求路徑?jīng)]有id則報(bào)錯(cuò)

params還可以指定請(qǐng)求中屬性值必須為多少

headers屬性
headers 的作用也是用于細(xì)化映射。只有當(dāng)請(qǐng)求的 Request Headers 中包含與 heanders 值相匹配的參數(shù),處理方法才會(huì)被調(diào)用。
@RequestMapping(value = "/specify", headers = "accept=text/*")
public String specify(){
return "example_specify_page";
}請(qǐng)求的 Request Headers 中 Accept 的值必須匹配 text/* ( 如 text/html ),方法才會(huì)被調(diào)用。
4. RequestMapping支持Ant風(fēng)格的通配符
| 通配符 | 說(shuō)明 | 示例 |
| ? | 匹配一個(gè)任意字符 | /a/?b 可以匹配/a/ab;/a/cb。但不能匹配/a/acb之類 |
| * | 匹配任意長(zhǎng)度的字符 | /a/ *b可以匹配/a/cb;/a/acb。但不能匹配/a/cb/vb |
| ** | 匹配多層路徑 | 可以匹配/a/ab;/a/acb;/a/ab/abc/…/… |
到此這篇關(guān)于SpringMVC中的@RequestMapping注解解析的文章就介紹到這了,更多相關(guān)@RequestMapping注解解析內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SpringMVC中@RequestMapping注解的實(shí)現(xiàn)
- 詳解SpringMVC中的@RequestMapping注解
- SpringBoot中的@RequestMapping注解的用法示例
- Spring MVC-@RequestMapping注解詳解
- SpringMVC?@RequestMapping注解屬性詳細(xì)介紹
- SpringMVC @RequestMapping注解應(yīng)用方法示例講解
- 詳解SpringBoot中@PostMapping注解的用法
- SpringBoot中@GetMapping注解的使用
- SpringMVC @GetMapping注解路徑?jīng)_突問(wèn)題解決
- Spring中@RequestMapping、@PostMapping、@GetMapping的實(shí)現(xiàn)
相關(guān)文章
Java將本地項(xiàng)目部署到Linux服務(wù)器的實(shí)踐
本文主要介紹了Java將本地項(xiàng)目部署到Linux服務(wù)器的實(shí)踐,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧<BR>2022-06-06
Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(44)
下面小編就為大家?guī)?lái)一篇Java基礎(chǔ)的幾道練習(xí)題(分享)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧,希望可以幫到你2021-07-07
Spring Data + Thymeleaf 3 + Bo
本篇文章主要介紹了Spring Data + Thymeleaf 3 + Bootstrap 4 實(shí)現(xiàn)分頁(yè)器實(shí)例代碼,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2017-05-05
JVM運(yùn)行時(shí)數(shù)據(jù)區(qū)劃分原理詳解
這篇文章主要介紹了JVM運(yùn)行時(shí)數(shù)據(jù)區(qū)劃分原理詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05
Maven中引入 springboot 相關(guān)依賴的方式(最新推薦)
這篇文章主要介紹了Maven中引入 springboot 相關(guān)依賴的方式(最新推薦),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2025-04-04
java 基于maven多模塊合并打包部署的操作過(guò)程
這篇文章主要介紹了java 基于maven多模塊合并打包部署的操作過(guò)程,本文通過(guò)實(shí)例代碼圖文相結(jié)合給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-02-02

