- 浏览: 623844 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (819)
- java开发 (110)
- 数据库 (56)
- javascript (30)
- 生活、哲理 (17)
- jquery (36)
- 杂谈 (15)
- linux (62)
- spring (52)
- kafka (11)
- http协议 (22)
- 架构 (18)
- ZooKeeper (18)
- eclipse (13)
- ngork (2)
- dubbo框架 (6)
- Mybatis (9)
- 缓存 (28)
- maven (20)
- MongoDB (3)
- 设计模式 (3)
- shiro (10)
- taokeeper (1)
- 锁和多线程 (3)
- Tomcat7集群 (12)
- Nginx (34)
- nodejs (1)
- MDC (1)
- Netty (7)
- solr (15)
- JSON (8)
- rabbitmq (32)
- disconf (7)
- PowerDesigne (0)
- Spring Boot (31)
- 日志系统 (6)
- erlang (2)
- Swagger (3)
- 测试工具 (3)
- docker (17)
- ELK (2)
- TCC分布式事务 (2)
- marathon (12)
- phpMyAdmin (12)
- git (3)
- Atomix (1)
- Calico (1)
- Lua (7)
- 泛解析 (2)
- OpenResty (2)
- spring mvc (19)
- 前端 (3)
- spring cloud (15)
- Netflix (1)
- zipkin (3)
- JVM 内存模型 (5)
- websocket (1)
- Eureka (4)
- apollo (2)
- idea (2)
- go (1)
- 业务 (0)
- idea开发工具 (1)
最新评论
-
sichunli_030:
对于频繁调用的话,建议采用连接池机制
配置TOMCAT及httpClient的keepalive以高效利用长连接 -
11想念99不见:
你好,我看不太懂。假如我的项目中会频繁调用rest接口,是要用 ...
配置TOMCAT及httpClient的keepalive以高效利用长连接
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
转自:http://blog.csdn.net/zhongweijian/article/details/9006305
在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
转自:http://blog.csdn.net/zhongweijian/article/details/9006305
发表评论
-
动手写一个异步Controller方法
2017-11-23 15:30 421http://twincle.iteye.com/blog/1 ... -
SpringMVC @ResponseBody 415错误处理
2017-11-22 11:23 810http://blog.csdn.net/yixiaoping ... -
Spring MVC DispatcherServlet配置
2017-11-03 09:02 344第三章 DispatcherServlet详解 ——跟开涛学S ... -
基于Spring MVC的Web应用开发(6) - Response
2017-08-29 18:27 420http://stephansun.iteye.com/blo ... -
Spring 4 官方文档学习(十一)Web MVC 框架之URI Builder
2017-08-10 10:39 391http://www.cnblogs.com/larryzea ... -
SpringMVC加载WebApplicationContext源码分析
2017-08-07 20:40 509SpringMVC加载WebApplicationContex ... -
定制jackson的自定义序列化(null值的处理)
2017-08-01 20:52 17http://www.cnblogs.com/lic309/p ... -
HandlerMethodArgumentResolver
2017-08-01 20:56 473https://sdqali.in/blog/2016/01/ ... -
spring rest mvc使用RestTemplate调用
2017-07-22 16:42 856import java.util.HashMap; impo ... -
Spring mvc 各种注解
2017-07-19 16:01 427http://blog.csdn.net/sudiluo_ja ... -
springmvc实现网站限流(HandlerInterceptorAdapter 拦截器)
2017-07-17 16:09 927辅助类,用于存储每个请求的访问数 public class A ... -
@RequestMapping 用法详解之地址映射
2017-07-14 18:36 347引言: 前段时间项目中用到了RESTful模式来开发程序,但是 ... -
SpringMVC的拦截器(Interceptor)和过滤器(Filter)的区别与联系
2017-07-11 19:16 16421.过滤器: 依赖于se ... -
springMvc--静态资源拦截
2017-07-10 18:38 406http://www.cnblogs.com/liucongl ... -
springMvc--接受日期类型参数处理
2017-07-10 18:33 9621.controller /** * 接收日期类型 ... -
SpringMVC 深度解析@RequestMapping(一)
2017-02-27 16:09 405参考:http://blog.csdn.net/congcon ... -
深入解析 Spring MVC的配置文件
2017-01-20 13:46 4081.关于mvc annotation-driven 中出入参数 ... -
@RequestParam @RequestBody @PathVariable 等参数绑定注解详解
2016-09-28 15:36 409引言: 接上一篇文章,对@RequestMapping进行地址 ... -
SpringMVC注解@RequestParam全面解析
2016-08-19 11:33 725在SpringMVC后台控制层获取参数的方式主要有两种,一种是 ...
相关推荐
本示例将详细介绍如何使用Spring Boot创建一个RESTful API。 **一、RESTful原则** REST(Representational State Transfer)是一种架构风格,强调通过HTTP协议来组织资源,以URI(Uniform Resource Identifier)...
以上就是关于使用Spring MVC创建RESTful服务的基本介绍。这个名为"springrest"的压缩包很可能包含了整个项目的源代码、配置文件和其他资源,你可以直接解压运行,学习其中的实现细节。通过这种方式,你可以更好地...
在构建基于Spring框架的RESTful API时,开发者可以利用Spring的强大功能来实现高效、安全且易于维护的后端服务。以下是一些关键知识点的详细解释: 1. **Spring Boot初始化Web应用** - **Maven依赖**:使用Spring ...
本项目提供了一个RestfulApi服务端的示例,帮助开发者了解如何构建这样的服务。 在RestfulApi服务端的实现中,通常会用到以下技术栈: 1. **服务器框架**:如Spring Boot或Express.js,它们为快速构建RESTful API...
在这个项目“Springboot_restful_api”中,开发者使用了SpringBoot来构建RESTful风格的API,这是一种广泛用于现代Web服务的设计模式,允许客户端和服务器之间通过HTTP协议交换信息。 REST(Representational State ...
在当今的Web开发中,RESTful API已经成为构建可扩展、易于维护的系统的重要组成部分。Spring框架,作为Java生态系统中的中流砥柱,提供了强大的支持来实现RESTful服务。本资料包"spring加载restful(文档+程序源码)...
本教程将通过一个名为"spring-mvc-demo"的项目,详细介绍如何使用Spring框架来实现RESTful Web服务。 一、Spring MVC与RESTful Web服务 Spring MVC是Spring框架的一部分,专门用于处理Web请求和响应。RESTful Web...
3. **RESTful API** 设计: - 使用 `@RestController` 注解标记控制器类,表明这是一个处理 HTTP 请求的类。 - `@RequestMapping` 和 `@GetMapping`、`@PostMapping`、`@PutMapping`、`@DeleteMapping` 等注解用于...
本文将深入探讨Spring框架如何实现RESTful API,以及这些概念在"springRestful小例子"中的具体应用。 首先,我们要理解什么是RESTful。REST(Representational State Transfer)是一种网络应用程序的设计风格和开发...
本文将深入探讨@RequestMapping的使用方式,以及其在处理RESTful API时如何与各种参数绑定注解(@RequestParam、@RequestBody、@RequestHeader、@PathVariable)配合工作,并简要提及HttpMessageConverter的概念。...
### Spring Boot开发实战:基于Spring Boot的RESTful API服务的实验心得与案例解析 #### 一、引言 Spring Boot自发布以来,以其强大的自动配置能力、简洁的开发模式以及丰富的社区支持,迅速成为了Java开发者构建...
在Java开发中,实现RESTful API通常使用Spring Framework的Spring MVC模块,它提供了对RESTful风格的支持,包括模型绑定、数据验证、异常处理等。开发者可以通过@Controller注解定义控制器,使用@RequestMapping及其...
在这个"restful结合spring实例"中,我们有两个具体的示例,一个基于Spring MVC,展示了如何在Spring框架下构建RESTful API。 首先,我们来看看RESTful的基本概念。RESTful设计的核心是将业务逻辑拆分为独立的资源,...
Spring 3 MVC框架是Java开发者广泛使用的构建Web应用的工具,它为开发RESTful API提供了强大的支持。本教程将深入探讨如何利用Spring 3 MVC实现RESTful服务。 首先,理解REST的基本原则至关重要。RESTful架构有以下...
标题中的“Spring4 Restful Web”指的是Spring框架的第四版(Spring 4)与RESTful Web服务的结合。REST(Representational State Transfer)是一种网络应用程序的设计风格和开发方式,基于HTTP协议,使得客户端和...
@RequestMapping("/api") public class MyRestController { //... } ``` 3. **定义处理方法**:在Controller中定义处理HTTP请求的方法,使用@RequestBody接收POST请求的JSON数据,@ResponseBody返回JSON数据。例如...
在本示例中,我们将探讨如何使用 Spring MVC 创建一个 RESTful API。 首先,我们需要了解 REST(Representational State Transfer)的基本原则。REST 是一种架构风格,其核心思想是将资源通过统一接口进行操作,...
尤其在实现RESTful API时,Spring Boot的优势更为显著。本Demo旨在展示如何使用Spring Boot创建一个遵循RESTful原则的Web服务。 REST(Representational State Transfer)是一种软件架构风格,用于设计网络应用程序...
**Spring 3 创建 RESTful Web Services 知识点详解** RESTful Web Services 是一种基于 Representational State Transfer(表述性状态转移)架构风格的 Web 应用设计模式,它强调资源的表述和状态转换,常用于构建...
在Spring框架中,RESTful API的设计与实现是现代Web服务的核心组成部分。为了提高基于Spring的RESTful服务的性能,我们可以采取一系列优化策略。以下是一些关键的优化方案,结合源码理解和工具应用: 1. **HTTP缓存...