spring3 的restful API RequestMapping介绍
在spring mvc中 @RequestMapping是把web请求映射到controller的方法上。
1.RequestMapping Basic Example
将http请求映射到controller方法的最直接方式
1.1 @RequestMapping by Path
@RequestMapping(value = "/foos")
@ResponseBody
public String getFoosBySimplePath() {
return "Get some Foos";
}
可以通过下面的方式测试: curl -i http://localhost:8080/springmvc/foos
1.2 @RequestMapping – the HTTP Method,我们可以加上http方法的限制
@RequestMapping(value = "/foos", method = RequestMethod.POST)
@ResponseBody
public String postFoos() {
return "Post some Foos";
}
可以通过curl i -X POST http://localhost:8080/springmvc/foos测试。
2.RequestMapping 和http header
2.1 @RequestMapping with the headers attribute
当request的header包含某个key value值时
@RequestMapping(value = "/foos", headers = "key=val")
@ResponseBody
public String getFoosWithHeader() {
return "Get some Foos with Header";
}
header多个字段满足条件时
@RequestMapping(value = "/foos", headers = { "key1=val1", "key2=val2" })
@ResponseBody
public String getFoosWithHeaders() {
return "Get some Foos with Header";
}
通过curl -i -H "key:val" http://localhost:8080/springmvc/foos 测试。
2.2 @RequestMapping 和Accept头
@RequestMapping(value = "/foos", method = RequestMethod.GET, headers = "Accept=application/json")
@ResponseBody
public String getFoosAsJsonFromBrowser() {
return "Get some Foos with Header Old";
}
支持accept头为json的请求,通过curl -H "Accept:application/json,text/html" http://localhost:8080/springmvc/foos测试
在spring3.1中@RequestMapping注解有produces和 consumes 两个属性来代替accept头
@RequestMapping(value = "/foos", method = RequestMethod.GET, produces = "application/json")
@ResponseBody
public String getFoosAsJsonFromREST() {
return "Get some Foos with Header New";
}
同样可以通过curl -H "Accept:application/json" http://localhost:8080/springmvc/foos测试
produces可以支持多个
@RequestMapping(value = "/foos", produces = { "application/json", "application/xml" })
当前不能有两个方法同时映射到同一个请求,要不然会出现下面这个异常
Caused by: java.lang.IllegalStateException: Ambiguous mapping found.
Cannot map 'fooController' bean method
public java.lang.String org.baeldung.spring.web.controller.FooController.getFoosAsJsonFromREST()
to {[/foos],methods=[GET],params=[],headers=[],consumes=[],produces=[application/json],custom=[]}:
There is already 'fooController' bean method
public java.lang.String org.baeldung.spring.web.controller.FooController.getFoosAsJsonFromBrowser()
mapped.
3.RequestMapping with Path Variables
3.1我们可以把@PathVariable把url映射到controller方法
单个@PathVariable参数映射
@RequestMapping(value = "/foos/{id}")
@ResponseBody
public String getFoosBySimplePathWithPathVariable(@PathVariable("id") long id) {
return "Get a specific Foo with id=" + id;
}
通过curl http://localhost:8080/springmvc/foos/1试试
如果参数名跟url参数名一样,可以省略为
@RequestMapping(value = "/foos/{id}")
@ResponseBody
public String getFoosBySimplePathWithPathVariable(@PathVariable String id) {
return "Get a specific Foo with id=" + id;
}
3.2 多个@PathVariable
@RequestMapping(value = "/foos/{fooid}/bar/{barid}")
@ResponseBody
public String getFoosBySimplePathWithPathVariables(@PathVariable long fooid, @PathVariable long barid) {
return "Get a specific Bar with id=" + barid + " from a Foo with id=" + fooid;
}
通过curl http://localhost:8080/springmvc/foos/1/bar/2测试。
3.3支持正则的@PathVariable
@RequestMapping(value = "/bars/{numericId:[\\d]+}")
@ResponseBody
public String getBarsBySimplePathWithPathVariable(@PathVariable final long numericId) {
return "Get a specific Bar with id=" + numericId;
}
这个url匹配:http://localhost:8080/springmvc/bars/1
不过这个不匹配:http://localhost:8080/springmvc/bars/abc
4.RequestMapping with Request Parameters
我们可以使用 @RequestParam注解把请求参数提取出来
比如url:http://localhost:8080/springmvc/bars?id=100
@RequestMapping(value = "/bars")
@ResponseBody
public String getBarBySimplePathWithRequestParam(@RequestParam("id") long id) {
return "Get a specific Bar with id=" + id;
}
我们可以通过RequestMapping定义参数列表
@RequestMapping(value = "/bars", params = "id")
@ResponseBody
public String getBarBySimplePathWithExplicitRequestParam(@RequestParam("id") long id) {
return "Get a specific Bar with id=" + id;
}
和
@RequestMapping(value = "/bars", params = { "id", "second" })
@ResponseBody
public String getBarBySimplePathWithExplicitRequestParams(@RequestParam("id") long id) {
return "Narrow Get a specific Bar with id=" + id;
}
比如http://localhost:8080/springmvc/bars?id=100&second=something会匹配到最佳匹配的方法上,这里会映射到下面这个。
5.RequestMapping Corner Cases
5.1 @RequestMapping多个路径映射到同一个controller的同一个方法
@RequestMapping(value = { "/advanced/bars", "/advanced/foos" })
@ResponseBody
public String getFoosOrBarsByPath() {
return "Advanced - Get some Foos or Bars";
}
下面这两个url会匹配到同一个方法
curl -i http://localhost:8080/springmvc/advanced/foos
curl -i http://localhost:8080/springmvc/advanced/bars
5.2@RequestMapping 多个http方法 映射到同一个controller的同一个方法
@RequestMapping(value = "/foos/multiple", method = { RequestMethod.PUT, RequestMethod.POST })
@ResponseBody
public String putAndPostFoos() {
return "Advanced - PUT and POST within single method";
}
下面这两个url都会匹配到上面这个方法
curl -i -X POST http://localhost:8080/springmvc/foos/multiple
curl -i -X PUT http://localhost:8080/springmvc/foos/multiple
5.3@RequestMapping 匹配所有方法
@RequestMapping(value = "*")
@ResponseBody
public String getFallback() {
return "Fallback for GET Requests";
}
匹配所有方法
@RequestMapping(value = "*", method = { RequestMethod.GET, RequestMethod.POST ... })
@ResponseBody
public String allFallback() {
return "Fallback for All Requests";
}
6.Spring Configuration
controller的annotation
@Controller
public class FooController { ... }
spring3.1
@Configuration
@EnableWebMvc
@ComponentScan({ "org.baeldung.spring.web.controller" })
public class MvcConfig {
//
}
可以从这里看到所有的示例https://github.com/eugenp/tutorials/tree/master/springmvc
分享到:
相关推荐
Spring boot restful api demo
spring mvc restful service,支持string, json, xml, maven工程,可以直接运行
为了解决上面这样的问题,本文将介绍RESTful API的重磅好伙伴Swagger2,它可以轻松的整合到Spring Boot中,并与Spring MVC程序配合组织出强大RESTful API文档。它既可以减少我们创建文档的工作量,同时说明内容又...
Spring Boot 整合 Mybatis 实现RESTful API ,具体可以查看博客: http://blog.csdn.net/yaozhiqi1905658804/article/details/70820892
Python Flask高级编程之RESTFul API前后端分离精讲第六章节Python Flask高级编程之RESTFul API前后端分离精讲第六章节Python Flask高级编程之RESTFul API前后端分离精讲第六章节Python Flask高级编程之RESTFul API...
Spring CXF Restful 实例
Python Flask高级编程之RESTFul API前后端分离精讲Python Flask高级编程之RESTFul API前后端分离精讲Python Flask高级编程之RESTFul API前后端分离精讲Python Flask高级编程之RESTFul API前后端分离精讲Python Flask...
完善的Spring+SpringMVC+Mybatis+easyUI后台管理系统(RESTful API+redis).zip 完善的Spring+SpringMVC+Mybatis+easyUI后台管理系统(RESTful API+redis).zip 完善的Spring+SpringMVC+Mybatis+easyUI后台管理系统...
用Spring maven做的restful api小Demo 仅供参考 看见有其他大神做的,积分太高了,我来个免积分下载的吧 ,不敢忘挖井人http://blog.csdn.net/u010857795/article/details/54377196 附上...
thinkphp6 RESTful API开发 开发过程记录笔记 https://blog.csdn.net/weixin_41120504/article/details/115638094
Python Flask高级编程之RESTFul API前后端分离精讲第二章节Python Flask高级编程之RESTFul API前后端分离精讲第二章节Python Flask高级编程之RESTFul API前后端分离精讲第二章节Python Flask高级编程之RESTFul API...
SpringBoot+Mybatis+CXF框架,实现Restful api与 WebService api接口的大实验
restful api 接口说明. 总结 restful api 语法知识和常用的状态码含义.
此代码通过c c++实现一个简单的http服务,可以用此实现一个restful api 服务器.
免费的学习视频,比网上骗人那些强多了,希望对大家有帮助。如果没有账号的注册一下就可以了
使用Spring 实现RESTful Web 服务 demo
java jersey spring 集成 开发 restful API ,并将restful 返回的数据以JSON的格式返回,开发非常简单,易懂。欢迎小伙伴们 下载资源。
RestFul API 案例 新手入门帮助 包括RestFul 和RestFul Api的介绍 也包括案例代码
它介绍了JAVAspring的Web服务的概念、原理和作用,以及如何使用JAVAspring的Web服务来开发RESTful API,包括HTTP方法、URI、状态码、请求和响应的格式、JSON和XML的转换、异常处理等内容,以及一些配置文件和注解的...
Spring构建后端API的实战总结,包括各种请求类型和数据格式的处理,安全认证等,比较实用