目录
1@RequestMapping
2.value属性
3.params属性
4.headers属性
5.method属性
6.RestFul 风格
结语
1@RequestMapping
介绍:@RequestMapping注解用于映射url到控制器类或一个特定的处理程序方法。可用于类或方法上。
-类定义处:提供初步的请求映射信息。相对于WEB应用的根目录
-方法处:提供进一步的细分映射,相对于类定义处的URL。若类定义处未标注@RequestMapping,则方法处标记的URL相对于WEB应用的根目录.
DispatcherServlet截获请求,就通过控制器上@RequestMapping提供的映射信息确定请求所对应的处理方法。
2.value属性
介绍:表示映射到前这个请求方法的访问地址。
(1)只注解在方法上
/ 表示到http://ip:port/工程名/ 映射到代码的WebContent目录
/blog 就表示到http://ip:port/工程名/blog
@Controller
public class BlogController {
@RequestMapping("/blog")
public String hello(Model model){
model.addAttribute("msg","Hello,SpringMVCAnnotation!");
return "hello";
}
}
浏览器:
(2)同时注解类与方法
@Controller
@RequestMapping("/mycontroller")
public class BlogController {
@RequestMapping("/blog")
public String hello(Model model){
model.addAttribute("msg","Hello,SpringMVCAnnotation!");
return "hello";
}
}
浏览器:
3.params属性
(1)params="yixin"表示请求地址必须带有yixin参数
(参数可以选择赋值或不赋值,但一定要有这个参数)
@Controller
public class BlogController {
@RequestMapping(value="/blog",params = "yixin")
public String hello(Model model){
model.addAttribute("msg","Hello,SpringMVCAnnotation!");
return "hello";
}
}
浏览器:
(2)params="name=yixin"表示请求参数中必须要有name,而且值还必须是yixin
@Controller
public class BlogController {
@RequestMapping(value="/blog",params = "name=yixin")
public String hello(Model model){
model.addAttribute("msg","Hello,SpringMVCAnnotation!");
return "hello";
}
}
浏览器:
(3)params="name!=yixin"表示
1、请求参数中不能有name参数。
2、有name参数,但值不能等于yixin
@Controller
public class BlogController {
@RequestMapping(value="/blog",params = "name!=yixin")
public String hello(Model model){
model.addAttribute("msg","Hello,SpringMVCAnnotation!");
return "hello";
}
}
浏览器:
第一种情况,不包含name参数:
第二种情况,包含name参数,但值不为yixin:
(4)params="!name"表示请求地址不能带有name参数
@Controller
public class BlogController {
@RequestMapping(value="/blog",params = "!name")
public String hello(Model model){
model.addAttribute("msg","Hello,SpringMVCAnnotation!");
return "hello";
}
}
浏览器:
(5)params= {"name!=yixin","password=123"} params可以有多个值,每个值之间是&&关系
@Controller
public class BlogController {
@RequestMapping(value="/blog",params = {"name!=yixin","password=123"})
public String hello(Model model){
model.addAttribute("msg","Hello,SpringMVCAnnotation!");
return "hello";
}
}
浏览器:
4.headers属性
介绍:限定请求头中的内容
headers = "User-Agent=Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) " + "Chrome/58.0.3029.110 Safari/537.36"
* 表示限定浏览器必须是谷歌浏览器,而且版本还是Chrome/58.0.3029.110
@Controller
public class BlogController {
@RequestMapping(value="/blog",headers = "User-Agent=Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36")
public String hello(Model model){
model.addAttribute("msg","Hello,SpringMVCAnnotation!");
return "hello";
}
}
5.method属性
介绍:使用method属性指定请求类型
用于约束请求的类型,可以收窄请求范围。指定请求谓词的类型如GET, POST, HEAD, OPTIONS, PUT, PATCH, DELETE, TRACE等
浏览器默认是使用GET请求的。故以下POST会报错
@Controller
public class BlogController {
@RequestMapping(value="/blog",method = RequestMethod.POST)
public String hello(Model model){
model.addAttribute("msg","Hello,SpringMVCAnnotation!");
return "hello";
}
}
浏览器:
我们修改为GET:
@Controller
public class BlogController {
@RequestMapping(value="/blog",method = RequestMethod.GET)
public String hello(Model model){
model.addAttribute("msg","Hello,SpringMVCAnnotation!");
return "hello";
}
}
浏览器:
这样就正常了。
6.RestFul 风格
介绍:Restful就是一个资源定位及资源操作的风格。不是标准也不是协议,只是一种风格。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。
@PathVariable 注解,让方法参数的值对应绑定到一个URI模板变量上
@Controller
public class BlogController {
@RequestMapping(value="/blog/{p1}/{p2}")
public String hello(@PathVariable int p1,@PathVariable int p2, Model model){
int result=p1+p2;
model.addAttribute("msg","p1+p2="+result);
return "hello";
}
}
浏览器:
使用路径变量的好处?
-
使路径变得更加简洁;
-
获得参数更加方便,框架会自动进行类型转换。
-
通过路径变量的类型可以约束访问参数,如果类型不一样,则访问不到对应的请求方法,如这里访问是的路径是/blog/1/a,则路径与方法不匹配,那么会出错。
结语
以上就是一心同学对@RequestMapping的讲解,通过这个注解可以让我们更加方便地确定请求所对应的处理方法。



