Spring MVC @RequestMapping Annotation Example with Controller, Methods, Headers, Params, @RequestParam, @PathVariable--转载
原文地址:
@RequestMapping is one of the most widely used Spring MVC annotation.org.springframework.web.bind.annotation.RequestMapping annotation is used to map web requests onto specific handler classes and/or handler methods.
@RequestMapping can be applied to the controller class as well as methods. Today we will look into various usage of this annotation with example.
- @RequestMapping with Class: We can use it with class definition to create the base URI. For example:
12345
@Controller@RequestMapping("/home")publicclassHomeController {}Now /home is the URI for which this controller will be used. This concept is very similar to servlet context of a web application.
- @RequestMapping with Method: We can use it with method to provide the URI pattern for which handler method will be used. For example:
12345
@RequestMapping(value="/method0")@ResponseBodypublicString method0(){return"method0";}Above annotation can also be written as
@RequestMapping("/method0"). On a side note, I am using @ResponseBody to send the String response for this web request, this is done to keep the example simple. Like I always do, I will use these methods in Spring MVC application and test them with a simple program or script. - @RequestMapping with Multiple URI: We can use a single method for handling multiple URIs, for example:
12345
@RequestMapping(value={"/method1","/method1/second"})@ResponseBodypublicString method1(){return"method1";}If you will look at the source code of RequestMapping annotation, you will see that all of it’s variables are arrays. We can create String array for the URI mappings for the handler method.
- @RequestMapping with HTTP Method: Sometimes we want to perform different operations based on the HTTP method used, even though request URI remains same. We can use @RequestMapping method variable to narrow down the HTTP methods for which this method will be invoked. For example:
1234567891011
@RequestMapping(value="/method2", method=RequestMethod.POST)@ResponseBodypublicString method2(){return"method2";}@RequestMapping(value="/method3", method={RequestMethod.POST,RequestMethod.GET})@ResponseBodypublicString method3(){return"method3";} - @RequestMapping with Headers: We can specify the headers that should be present to invoke the handler method. For example:
1234567891011
@RequestMapping(value="/method4", headers="name=pankaj")@ResponseBodypublicString method4(){return"method4";}@RequestMapping(value="/method5", headers={"name=pankaj","id=1"})@ResponseBodypublicString method5(){return"method5";} - @RequestMapping with Produces and Consumes: We can use header
Content-TypeandAcceptto find out request contents and what is the mime message it wants in response. For clarity, @RequestMapping provides produces and consumes variables where we can specify the request content-type for which method will be invoked and the response content type. For example:12345@RequestMapping(value="/method6", produces={"application/json","application/xml"}, consumes="text/html")@ResponseBodypublicString method6(){return"method6";}Above method can consume message only with Content-Type as text/html and is able to produce messages of type application/json and application/xml.
- @RequestMapping with @PathVariable: RequestMapping annotation can be used to handle dynamic URIs where one or more of the URI value works as a parameter. We can even specify Regular Expression for URI dynamic parameter to accept only specific type of input. It works with@PathVariable annotation through which we can map the URI variable to one of the method arguments. For example:
1234567891011
@RequestMapping(value="/method7/{id}")@ResponseBodypublicString method7(@PathVariable("id")intid){return"method7 with id="+id;}@RequestMapping(value="/method8/{id:[\\d]+}/{name}")@ResponseBodypublicString method8(@PathVariable("id")longid,@PathVariable("name") String name){return"method8 with id= "+id+" and name="+name;} - @RequestMapping with @RequestParam for URL parameters: Sometimes we get parameters in the request URL, mostly in GET requests. We can use @RequestMapping with @RequestParam annotationto retrieve the URL parameter and map it to the method argument. For example:
12345
@RequestMapping(value="/method9")@ResponseBodypublicString method9(@RequestParam("id")intid){return"method9 with id= "+id;}For this method to work, the parameter name should be “id” and it should be of type int.
- @RequestMapping default method: If value is empty for a method, it works as default method for the controller class. For example:
12345
@RequestMapping()@ResponseBodypublicString defaultMethod(){return"default method";}As you have seen above that we have mapped
/hometoHomeController, this method will be used for the default URI requests. - @RequestMapping fallback method: We can create a fallback method for the controller class to make sure we are catching all the client requests even though there are no matching handler methods. It is useful in sending custom 404 response pages to users when there are no handler methods for the request.
12345
@RequestMapping("*")@ResponseBodypublicString fallbackMethod(){return"fallback method";}
Test Program
We can use Spring RestTemplate to test the different methods above, but today I will use cURL commands to test these methods because these are simple and there are not much data flowing around.
I have created a simple shell script to invoke all the above methods and print their output. It looks like below.
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
#!/bin/bashecho "curl http://localhost:9090/SpringRequestMappingExample/home/method0";curl http://localhost:9090/SpringRequestMappingExample/home/method0;printf "\n\n*****\n\n";echo "curl http://localhost:9090/SpringRequestMappingExample/home";curl http://localhost:9090/SpringRequestMappingExample/home;printf "\n\n*****\n\n";echo "curl http://localhost:9090/SpringRequestMappingExample/home/xyz";curl http://localhost:9090/SpringRequestMappingExample/home/xyz;printf "\n\n*****\n\n";echo "curl http://localhost:9090/SpringRequestMappingExample/home/method1";curl http://localhost:9090/SpringRequestMappingExample/home/method1;printf "\n\n*****\n\n";echo "curl http://localhost:9090/SpringRequestMappingExample/home/method1/second";curl http://localhost:9090/SpringRequestMappingExample/home/method1/second;printf "\n\n*****\n\n";echo "curl -X POST http://localhost:9090/SpringRequestMappingExample/home/method2";curl -X POST http://localhost:9090/SpringRequestMappingExample/home/method2;printf "\n\n*****\n\n";echo "curl -X POST http://localhost:9090/SpringRequestMappingExample/home/method3";curl -X POST http://localhost:9090/SpringRequestMappingExample/home/method3;printf "\n\n*****\n\n";echo "curl -X GET http://localhost:9090/SpringRequestMappingExample/home/method3";curl -X GET http://localhost:9090/SpringRequestMappingExample/home/method3;printf "\n\n*****\n\n";echo "curl -H "name:pankaj" http://localhost:9090/SpringRequestMappingExample/home/method4";curl -H "name:pankaj" http://localhost:9090/SpringRequestMappingExample/home/method4;printf "\n\n*****\n\n";echo "curl -H "name:pankaj" -H "id:1" http://localhost:9090/SpringRequestMappingExample/home/method5";curl -H "name:pankaj" -H "id:1" http://localhost:9090/SpringRequestMappingExample/home/method5;printf "\n\n*****\n\n";echo "curl -H "Content-Type:text/html" http://localhost:9090/SpringRequestMappingExample/home/method6";curl -H "Content-Type:text/html" http://localhost:9090/SpringRequestMappingExample/home/method6;printf "\n\n*****\n\n";echo "curl http://localhost:9090/SpringRequestMappingExample/home/method6";curl http://localhost:9090/SpringRequestMappingExample/home/method6;printf "\n\n*****\n\n";echo "curl -H "Content-Type:text/html" -H "Accept:application/json" -i http://localhost:9090/SpringRequestMappingExample/home/method6";curl -H "Content-Type:text/html" -H "Accept:application/json" -i http://localhost:9090/SpringRequestMappingExample/home/method6;printf "\n\n*****\n\n";echo "curl -H "Content-Type:text/html" -H "Accept:application/xml" -i http://localhost:9090/SpringRequestMappingExample/home/method6";curl -H "Content-Type:text/html" -H "Accept:application/xml" -i http://localhost:9090/SpringRequestMappingExample/home/method6;printf "\n\n*****\n\n";echo "curl http://localhost:9090/SpringRequestMappingExample/home/method7/1";curl http://localhost:9090/SpringRequestMappingExample/home/method7/1;printf "\n\n*****\n\n";echo "curl http://localhost:9090/SpringRequestMappingExample/home/method8/10/Lisa";curl http://localhost:9090/SpringRequestMappingExample/home/method8/10/Lisa;printf "\n\n*****\n\n";echo "curl http://localhost:9090/SpringRequestMappingExample/home/method9?id=20";curl http://localhost:9090/SpringRequestMappingExample/home/method9?id=20;printf "\n\n*****DONE*****\n\n"; |
Note that I have deployed my web application on Tomcat-7 and it’s running on port 9090.SpringRequestMappingExample is the servlet context of the application. Now when I execute this script through command line, I get following output.
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
|
pankaj:~ pankaj$ ./springTest.sh curl http://localhost:9090/SpringRequestMappingExample/home/method0method0*****curl http://localhost:9090/SpringRequestMappingExample/homedefault method*****curl http://localhost:9090/SpringRequestMappingExample/home/xyzfallback method*****curl http://localhost:9090/SpringRequestMappingExample/home/method1method1*****curl http://localhost:9090/SpringRequestMappingExample/home/method1/secondmethod1*****curl -X POST http://localhost:9090/SpringRequestMappingExample/home/method2method2*****curl -X POST http://localhost:9090/SpringRequestMappingExample/home/method3method3*****curl -X GET http://localhost:9090/SpringRequestMappingExample/home/method3method3*****curl -H name:pankaj http://localhost:9090/SpringRequestMappingExample/home/method4method4*****curl -H name:pankaj -H id:1 http://localhost:9090/SpringRequestMappingExample/home/method5method5*****curl -H Content-Type:text/html http://localhost:9090/SpringRequestMappingExample/home/method6method6*****curl http://localhost:9090/SpringRequestMappingExample/home/method6fallback method*****curl -H Content-Type:text/html -H Accept:application/json -i http://localhost:9090/SpringRequestMappingExample/home/method6HTTP/1.1 200 OKServer: Apache-Coyote/1.1Content-Type: application/jsonContent-Length: 7Date: Thu, 03 Jul 2014 18:14:10 GMTmethod6*****curl -H Content-Type:text/html -H Accept:application/xml -i http://localhost:9090/SpringRequestMappingExample/home/method6HTTP/1.1 200 OKServer: Apache-Coyote/1.1Content-Type: application/xmlContent-Length: 7Date: Thu, 03 Jul 2014 18:14:10 GMTmethod6*****curl http://localhost:9090/SpringRequestMappingExample/home/method7/1method7 with id=1*****curl http://localhost:9090/SpringRequestMappingExample/home/method8/10/Lisamethod8 with id= 10 and name=Lisa*****curl http://localhost:9090/SpringRequestMappingExample/home/method9?id=20method9 with id= 20*****DONE*****pankaj:~ pankaj$ |
Most of these are self understood, although you might want to check default and fallback methods. That’s all for Spring RequestMapping Example, I hope it will help you in understanding this annotation and it’s various features. You should download the sample project from below link and try different scenarios to explore it further.
Spring MVC @RequestMapping Annotation Example with Controller, Methods, Headers, Params, @RequestParam, @PathVariable--转载的更多相关文章
- spring mvc: 多动作控制器(Controller下面实现多个访问的方法)MultiActionController / BeanNameUrlHandlerMapping
spring mvc: 多动作控制器(Controller下面实现多个访问的方法) 比如我的控制器是UserController.java,下面有home, add, remove等多个方法 访问地址 ...
- Spring MVC — @RequestMapping原理讲解-1
转载地址 :http://blog.csdn.net/j080624/article/details/56278461 为了降低文章篇幅,使得文章更目标化,简洁化,我们就不例举各种@RequestMa ...
- Spring MVC中基于注解的 Controller
终于来到了基于注解的 Spring MVC 了.之前我们所讲到的 handler,需要根据 url 并通过 HandlerMapping 来映射出相应的 handler 并调用相应的方法以响 ...
- Spring MVC @RequestMapping注解详解
@RequestMapping 参数说明 value:定义处理方法的请求的 URL 地址.(重点) method:定义处理方法的 http method 类型,如 GET.POST 等.(重点) pa ...
- [Spring MVC]学习笔记--@Controller
在讲解@Controller之前,先说明一下Spring MVC的官方文档在哪. 可能会有人和我一样,在刚接触Spring MVC时,发现在Spring的网站上找不到Spring MVC这个项目. 这 ...
- Spring MVC @RequestMapping注解详解(2)
@RequestMapping 参数说明 value:定义处理方法的请求的 URL 地址.(重点) method:定义处理方法的 http method 类型,如 GET.POST 等.(重点) pa ...
- spring mvc中的service和controller中读取不到properties值
根据web.xml读取配置文件中的顺序来看 controller层和service层来自于spring mvc.xml中读取,所以必须要在spring mvc.xml中配置读取资源文件夹方式
- spring mvc requestmapping 配置多个
参考 import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation. ...
- Spring MVC @RequestMapping浅析
简介:@RequestMappingRequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上.用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径.RequestMapp ...
随机推荐
- rm 注意
软连接ln -s lnfile file rm -rf lnfile只是删除lnfile ln -s lndir dir rm -rf lndir 删除链接 rm -rf lndir/删除目录下文件
- poj2528(线段树+离散化)Mayor's posters
2016-08-15 题意:一面墙,往上面贴海报,后面贴的可以覆盖前面贴的.问最后能看见几种海报. 思路:可以理解成往墙上涂颜色,最后能看见几种颜色(下面就是以涂色来讲的).这面墙长度为1~1000 ...
- 未能加载文件或程序集“Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。
未能加载文件或程序集“Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed”或它的某一个 ...
- [转]float,double和decimal类型
float:浮点型,含字节数为4,32bit,数值范围为-3.4E38~3.4E38(7个有效位) double:双精度实型,含字节数为8,64bit数值范围-1.7E308~1.7E308(15个有 ...
- Objective-C 学习笔记(1)
文件描述: .h 类的声明文件,用户声明变量.函数(方法) .m 类的实现文件,用户实现.h中的函数(方法) 类的声明使用关键字 @interface.@end 类的实现使用关键字@implement ...
- Dependency Injection学习笔记
component把需要依赖者(CoffeeMaker)和供应提供者(Heater, Pump)联系起来 使用 区别:上的的依赖是内部创建的,下面的依赖是外面传进来的 注入方式
- Model&Animation
[Model&Animation] 1.FBX文件是一个完整的模型,通常内含Mesh,Material,Texture,Animation,即内含构成一个完成GameObject所需要的一切组 ...
- mysql编码详解
在开发程序的时候,我们使用mysql数据库开发的时候,有时会碰到自己明明输入的是中文,为什么数据库中存储的就是???? 1.在配置Connection URL时,加上?useUnicode=true& ...
- Windows 7 不同安装模式简要区别(图解)
★ 你可能对GHOST不支持AHCI感到迷惑,实际上,写过GHOST一键安装批处理的都知道一个叫FINDCD.EXE的小程序,可是这个程序老 了,AHCI模式光驱他找不到了,找不到光驱动意味着光盘中G ...
- thinkPHP 无法create,无法插入数据,提示非法数据对象
4.thinkPHP 无法create,提示非法数据对象解决方法:不要create+add,而用 data[]= '';+add$m_r_fa_account = D('R_fa_account'); ...