本文引自:https://blog.csdn.net/qq_33811662/article/details/80864784
RequestMapping是一個用來處理請求地址映射的注解,可用於類、接口貨方法上,用於類或者接口上的時候,表示類中的所有相應請求的方法都是以該地址作為父路徑,基本字段有name,path(value)(path 和 value 互相引用),method,params,headers,consumes,produces
比較常用的有:
value(path)
指定請求的實際地址,指定的地址可以是 URI Template 模式
method
指定請求的 method 類型。例如 GET、POST、PUT、DELETE 等
consumes
指定處理請求的提交內容類型(Content-Type),例如application/json,text/html;
produces
指定返回的內容類型,僅當 request 請求頭中的(Accept)類型中包含該指定類型才返回
params
指定 request 中必須包含某些參數值,才讓該方法處理請求。
header
指定 request 中必須包含某些指定的 header 值,才能讓該方法處理請求。
value 用法:
在方法上聲明:
@Controller
public class LoginController {
@RequestMapping("/to_login")
public ModelAndView toLogin(){
System.out.println("進入 to_login");
ModelAndView mv = new ModelAndView();
mv.setViewName("login");
return mv;
}
}
此時請求地址為 ip/項目名/to_login
在類上聲明一個 @RequestMapping 注解:
@Controller
@RequestMapping("/login")
public class LoginController {
@RequestMapping("/to_login")
public ModelAndView toLogin(){
System.out.println("進入 to_login");
ModelAndView mv = new ModelAndView();
mv.setViewName("login");
return mv;
}
}
則此時請求地址為 ip/項目名/login/to_login
* 普通 URL 映射:@RequestMapping({“/to_login”,”login”}):多個URL路徑可以映射到同一個處理器的功能處理方法
* URI 模版模式映射
1、@RequestMapping(“/login/{userId}”):{xx} 占位符請求URL 可以是 “/login/123” 或 “/login/abc”。通過@PathVariable 可以提取 URI 模版模式中的 {xx} 中的 xx 變量的值。
2、@RequestMapping(“/login/{userId}/topic”):請求的 URL 可以是 “/login/uid/topic”
3、@RequestMapping(“/login/{userId}/topic/{topicId}”):請求的 URL 可以是 “/login/uid/topic/tid”
Ant 風格的 URL 路徑映射
1、@RequestMapping(“/login/**”):可以匹配 “/login/abc/abc”,但 “/login/abc” 將會被 URI 模版模式映射中的 “/login/{userId}” 模式優先映射到(最長匹配優先)
2、@RequestMapping(“/login/abc?”):可匹配 “/login/abcd” 或者 “/login/abc1”,但不匹配 “/login/abc” 或 “/login/abcde”
3、@RequestMapping(“/login/abc*”):可匹配 “/login/abcd” 或 “/login/abcde”,但不匹配 “/login/abc”
代碼示例:
@Controller
@RequestMapping("/login")
public class LoginController {
@RequestMapping("/to_login")
public ModelAndView toLogin() {
System.out.println("進入 to_login");
ModelAndView mv = new ModelAndView();
mv.addObject("path", "/to_login");
mv.setViewName("login");
return mv;
}
@RequestMapping({"/to_login2","/login"})
public ModelAndView toLogin2() {
System.out.println("進入 to_login");
ModelAndView mv = new ModelAndView();
mv.addObject("path", "/to_login2,/login");
mv.setViewName("login");
return mv;
}
@RequestMapping({"/to_login/abc?"})
public ModelAndView toLogin3() {
System.out.println("進入 to_login");
ModelAndView mv = new ModelAndView();
mv.addObject("path", "/to_login/abc?");
mv.setViewName("login");
return mv;
}
@RequestMapping({"/to_login/abc*"})
public ModelAndView toLogin4() {
System.out.println("進入 to_login");
ModelAndView mv = new ModelAndView();
mv.addObject("path", "/to_login/abc*");
mv.setViewName("login");
return mv;
}
@RequestMapping("/**")
public ModelAndView toLogin5() {
System.out.println("進入 /**");
ModelAndView mv = new ModelAndView();
mv.addObject("path", "/**");
mv.setViewName("login");
return mv;
}
@RequestMapping("/to_login/**")
public ModelAndView toLogin6() {
System.out.println("進入 /to_login/**");
ModelAndView mv = new ModelAndView();
mv.addObject("path", "/to_login/**");
mv.setViewName("login");
return mv;
}
@RequestMapping("/to_login/abc")
public ModelAndView toLogin7() {
System.out.println("進入 /to_login/abc");
ModelAndView mv = new ModelAndView();
mv.addObject("path", "/to_login/abc");
mv.setViewName("login");
return mv;
}
@RequestMapping("/**/abc")
public ModelAndView toLogin8() {
System.out.println("進入 /**/abc");
ModelAndView mv = new ModelAndView();
mv.addObject("path", "/**/abc");
mv.setViewName("login");
return mv;
}
@RequestMapping("/*/*")
public ModelAndView toLogin9() {
System.out.println("進入 /*/*");
ModelAndView mv = new ModelAndView();
mv.addObject("path", "/*/*");
mv.setViewName("login");
return mv;
}
}