`
kavy
  • 浏览: 888117 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

spring3 的restful API RequestMapping介绍

 
阅读更多

原文链接:http://www.javaarch.net/jiagoushi/694.htm

 

 

[java] view plaincopy
 
  1. spring3 的restful API RequestMapping介绍  
  2.   
  3. 在spring mvc中 @RequestMapping是把web请求映射到controller的方法上。  
  4.   
  5. 1.RequestMapping Basic Example  
  6.   将http请求映射到controller方法的最直接方式  
  7. 1.1 @RequestMapping  by Path  
  8.    
  9.     @RequestMapping(value = "/foos")  
  10.     @ResponseBody  
  11.     public String getFoosBySimplePath() {  
  12.         return "Get some Foos";  
  13.     }  
  14.       
  15. 可以通过下面的方式测试: curl -i http://localhost:8080/springmvc/foos  
  16.   
  17. 1.2 @RequestMapping – the HTTP Method,我们可以加上http方法的限制  
  18.   
  19.     @RequestMapping(value = "/foos", method = RequestMethod.POST)  
  20.     @ResponseBody  
  21.     public String postFoos() {  
  22.         return "Post some Foos";  
  23.     }  
  24.       
  25. 可以通过curl i -X POST http://localhost:8080/springmvc/foos测试。  
  26.   
  27. 2.RequestMapping 和http header  
  28.   
  29. 2.1 @RequestMapping with the headers attribute  
  30.   当request的header包含某个key value值时  
  31.       
  32.     @RequestMapping(value = "/foos", headers = "key=val")  
  33.     @ResponseBody  
  34.     public String getFoosWithHeader() {  
  35.         return "Get some Foos with Header";  
  36.     }  
  37.       
  38.   header多个字段满足条件时  
  39.     
  40.     @RequestMapping(value = "/foos", headers = { "key1=val1""key2=val2" })  
  41.     @ResponseBody  
  42.     public String getFoosWithHeaders() {  
  43.         return "Get some Foos with Header";  
  44.     }  
  45.       
  46. 通过curl -i -H "key:val" http://localhost:8080/springmvc/foos 测试。  
  47.   
  48. 2.2 @RequestMapping 和Accept头  
  49.   
  50.     @RequestMapping(value = "/foos", method = RequestMethod.GET, headers = "Accept=application/json")  
  51.     @ResponseBody  
  52.     public String getFoosAsJsonFromBrowser() {  
  53.         return "Get some Foos with Header Old";  
  54.     }  
  55. 支持accept头为json的请求,通过curl -H "Accept:application/json,text/html" http://localhost:8080/springmvc/foos测试  
  56.   
  57. 在spring3.1@RequestMapping注解有produces和 consumes 两个属性来代替accept头  
  58.   
  59.     @RequestMapping(value = "/foos", method = RequestMethod.GET, produces = "application/json")  
  60.     @ResponseBody  
  61.     public String getFoosAsJsonFromREST() {  
  62.         return "Get some Foos with Header New";  
  63.     }  
  64. 同样可以通过curl -H "Accept:application/json" http://localhost:8080/springmvc/foos测试  
  65.   
  66. produces可以支持多个  
  67.   
  68.     @RequestMapping(value = "/foos", produces = { "application/json""application/xml" })  
  69.       
  70. 当前不能有两个方法同时映射到同一个请求,要不然会出现下面这个异常  
  71.   
  72.     Caused by: java.lang.IllegalStateException: Ambiguous mapping found.   
  73.     Cannot map 'fooController' bean method  
  74.     public java.lang.String org.baeldung.spring.web.controller.FooController.getFoosAsJsonFromREST()  
  75.     to {[/foos],methods=[GET],params=[],headers=[],consumes=[],produces=[application/json],custom=[]}:   
  76.     There is already 'fooController' bean method  
  77.     public java.lang.String org.baeldung.spring.web.controller.FooController.getFoosAsJsonFromBrowser()   
  78.     mapped.  
  79.       
  80. 3.RequestMapping with Path Variables  
  81. 3.1我们可以把@PathVariable把url映射到controller方法  
  82.     单个@PathVariable参数映射  
  83.       
  84.     @RequestMapping(value = "/foos/{id}")  
  85.     @ResponseBody  
  86.     public String getFoosBySimplePathWithPathVariable(@PathVariable("id"long id) {  
  87.        return "Get a specific Foo with id=" + id;  
  88.     }  
  89.   
  90. 通过curl http://localhost:8080/springmvc/foos/1试试  
  91. 如果参数名跟url参数名一样,可以省略为  
  92.   
  93.     @RequestMapping(value = "/foos/{id}")  
  94.     @ResponseBody  
  95.     public String getFoosBySimplePathWithPathVariable(@PathVariable String id) {  
  96.        return "Get a specific Foo with id=" + id;  
  97.     }  
  98. 3.2 多个@PathVariable  
  99.     
  100.     @RequestMapping(value = "/foos/{fooid}/bar/{barid}")  
  101.     @ResponseBody  
  102.     public String getFoosBySimplePathWithPathVariables(@PathVariable long fooid, @PathVariable long barid) {  
  103.         return "Get a specific Bar with id=" + barid + " from a Foo with id=" + fooid;  
  104.     }  
  105.       
  106. 通过curl http://localhost:8080/springmvc/foos/1/bar/2测试。  
  107.   
  108. 3.3支持正则的@PathVariable   
  109.     
  110.     @RequestMapping(value = "/bars/{numericId:[\\d]+}")  
  111.     @ResponseBody  
  112.     public String getBarsBySimplePathWithPathVariable(@PathVariable final long numericId) {  
  113.         return "Get a specific Bar with id=" + numericId;  
  114.     }  
  115.   
  116. 这个url匹配:http://localhost:8080/springmvc/bars/1  
  117. 不过这个不匹配:http://localhost:8080/springmvc/bars/abc  
  118.   
  119. 4.RequestMapping with Request Parameters  
  120.   
  121. 我们可以使用 @RequestParam注解把请求参数提取出来  
  122. 比如url:http://localhost:8080/springmvc/bars?id=100  
  123.   
  124.     @RequestMapping(value = "/bars")  
  125.     @ResponseBody  
  126.     public String getBarBySimplePathWithRequestParam(@RequestParam("id"long id) {  
  127.         return "Get a specific Bar with id=" + id;  
  128.     }  
  129.       
  130. 我们可以通过RequestMapping定义参数列表  
  131.   
  132.     @RequestMapping(value = "/bars", params = "id")  
  133.     @ResponseBody  
  134.     public String getBarBySimplePathWithExplicitRequestParam(@RequestParam("id"long id) {  
  135.         return "Get a specific Bar with id=" + id;  
  136.     }  
  137.       
  138. 和  
  139.   
  140.     @RequestMapping(value = "/bars", params = { "id""second" })  
  141.     @ResponseBody  
  142.     public String getBarBySimplePathWithExplicitRequestParams(@RequestParam("id"long id) {  
  143.         return "Narrow Get a specific Bar with id=" + id;  
  144.     }  
  145.       
  146. 比如http://localhost:8080/springmvc/bars?id=100&second=something会匹配到最佳匹配的方法上,这里会映射到下面这个。  
  147.   
  148. 5.RequestMapping Corner Cases  
  149.   
  150. 5.1 @RequestMapping多个路径映射到同一个controller的同一个方法  
  151.   
  152.     @RequestMapping(value = { "/advanced/bars""/advanced/foos" })  
  153.     @ResponseBody  
  154.     public String getFoosOrBarsByPath() {  
  155.         return "Advanced - Get some Foos or Bars";  
  156.     }  
  157.       
  158. 下面这两个url会匹配到同一个方法  
  159.   
  160.     curl -i http://localhost:8080/springmvc/advanced/foos  
  161.     curl -i http://localhost:8080/springmvc/advanced/bars  
  162.       
  163. 5.2@RequestMapping 多个http方法 映射到同一个controller的同一个方法  
  164.   
  165.     @RequestMapping(value = "/foos/multiple", method = { RequestMethod.PUT, RequestMethod.POST })  
  166.     @ResponseBody  
  167.     public String putAndPostFoos() {  
  168.         return "Advanced - PUT and POST within single method";  
  169.     }  
  170. 下面这两个url都会匹配到上面这个方法  
  171.   
  172.     curl -i -X POST http://localhost:8080/springmvc/foos/multiple  
  173.     curl -i -X PUT http://localhost:8080/springmvc/foos/multiple  
  174.       
  175. 5.3@RequestMapping 匹配所有方法  
  176.   
  177.     @RequestMapping(value = "*")  
  178.     @ResponseBody  
  179.     public String getFallback() {  
  180.         return "Fallback for GET Requests";  
  181.     }  
  182.   
  183. 匹配所有方法  
  184.       
  185.     @RequestMapping(value = "*", method = { RequestMethod.GET, RequestMethod.POST ... })  
  186.     @ResponseBody  
  187.     public String allFallback() {  
  188.         return "Fallback for All Requests";  
  189.     }  
  190.       
  191. 6.Spring Configuration  
  192.   
  193. controller的annotation  
  194.   
  195.     @Controller  
  196.     public class FooController { ... }  
  197.       
  198. spring3.1  
  199.   
  200.     @Configuration  
  201.     @EnableWebMvc  
  202.     @ComponentScan({ "org.baeldung.spring.web.controller" })  
  203.     public class MvcConfig {  
  204.         //  
  205.     }  
  206.       
  207. 可以从这里看到所有的示例https://github.com/eugenp/tutorials/tree/master/springmvc  

 

分享到:
评论

相关推荐

    Spring boot restful api demo

    本示例将详细介绍如何使用Spring Boot创建一个RESTful API。 **一、RESTful原则** REST(Representational State Transfer)是一种架构风格,强调通过HTTP协议来组织资源,以URI(Uniform Resource Identifier)...

    spring mvc restful service

    以上就是关于使用Spring MVC创建RESTful服务的基本介绍。这个名为"springrest"的压缩包很可能包含了整个项目的源代码、配置文件和其他资源,你可以直接解压运行,学习其中的实现细节。通过这种方式,你可以更好地...

    采用Spring框架构建你的RestfulAPI

    在构建基于Spring框架的RESTful API时,开发者可以利用Spring的强大功能来实现高效、安全且易于维护的后端服务。以下是一些关键知识点的详细解释: 1. **Spring Boot初始化Web应用** - **Maven依赖**:使用Spring ...

    RestfulApi服务端.zip

    本项目提供了一个RestfulApi服务端的示例,帮助开发者了解如何构建这样的服务。 在RestfulApi服务端的实现中,通常会用到以下技术栈: 1. **服务器框架**:如Spring Boot或Express.js,它们为快速构建RESTful API...

    Springboot_restful_api

    在这个项目“Springboot_restful_api”中,开发者使用了SpringBoot来构建RESTful风格的API,这是一种广泛用于现代Web服务的设计模式,允许客户端和服务器之间通过HTTP协议交换信息。 REST(Representational State ...

    spring加载restful(文档+程序源码).zip

    在当今的Web开发中,RESTful API已经成为构建可扩展、易于维护的系统的重要组成部分。Spring框架,作为Java生态系统中的中流砥柱,提供了强大的支持来实现RESTful服务。本资料包"spring加载restful(文档+程序源码)...

    Spring实现RESTful Web 服务Demo

    本教程将通过一个名为"spring-mvc-demo"的项目,详细介绍如何使用Spring框架来实现RESTful Web服务。 一、Spring MVC与RESTful Web服务 Spring MVC是Spring框架的一部分,专门用于处理Web请求和响应。RESTful Web...

    spring boot restful 接口示例项目

    3. **RESTful API** 设计: - 使用 `@RestController` 注解标记控制器类,表明这是一个处理 HTTP 请求的类。 - `@RequestMapping` 和 `@GetMapping`、`@PostMapping`、`@PutMapping`、`@DeleteMapping` 等注解用于...

    springRestful小例子

    本文将深入探讨Spring框架如何实现RESTful API,以及这些概念在"springRestful小例子"中的具体应用。 首先,我们要理解什么是RESTful。REST(Representational State Transfer)是一种网络应用程序的设计风格和开发...

    Spring MVC之@RequestMapping详解

    本文将深入探讨@RequestMapping的使用方式,以及其在处理RESTful API时如何与各种参数绑定注解(@RequestParam、@RequestBody、@RequestHeader、@PathVariable)配合工作,并简要提及HttpMessageConverter的概念。...

    Spring Boot开发实战:基于Spring Boot的RESTful API服务的实验心得与案例解析

    ### Spring Boot开发实战:基于Spring Boot的RESTful API服务的实验心得与案例解析 #### 一、引言 Spring Boot自发布以来,以其强大的自动配置能力、简洁的开发模式以及丰富的社区支持,迅速成为了Java开发者构建...

    restful api guidelines

    在Java开发中,实现RESTful API通常使用Spring Framework的Spring MVC模块,它提供了对RESTful风格的支持,包括模型绑定、数据验证、异常处理等。开发者可以通过@Controller注解定义控制器,使用@RequestMapping及其...

    restful结合spring实例,带有两个例子

    在这个"restful结合spring实例"中,我们有两个具体的示例,一个基于Spring MVC,展示了如何在Spring框架下构建RESTful API。 首先,我们来看看RESTful的基本概念。RESTful设计的核心是将业务逻辑拆分为独立的资源,...

    RESTful_Spring3MVC

    Spring 3 MVC框架是Java开发者广泛使用的构建Web应用的工具,它为开发RESTful API提供了强大的支持。本教程将深入探讨如何利用Spring 3 MVC实现RESTful服务。 首先,理解REST的基本原则至关重要。RESTful架构有以下...

    spring4 restful web

    标题中的“Spring4 Restful Web”指的是Spring框架的第四版(Spring 4)与RESTful Web服务的结合。REST(Representational State Transfer)是一种网络应用程序的设计风格和开发方式,基于HTTP协议,使得客户端和...

    spring 发布restful 服务

    @RequestMapping("/api") public class MyRestController { //... } ``` 3. **定义处理方法**:在Controller中定义处理HTTP请求的方法,使用@RequestBody接收POST请求的JSON数据,@ResponseBody返回JSON数据。例如...

    Spring mvc RESTful demo

    在本示例中,我们将探讨如何使用 Spring MVC 创建一个 RESTful API。 首先,我们需要了解 REST(Representational State Transfer)的基本原则。REST 是一种架构风格,其核心思想是将资源通过统一接口进行操作,...

    Spring boot Restful风格Demo

    尤其在实现RESTful API时,Spring Boot的优势更为显著。本Demo旨在展示如何使用Spring Boot创建一个遵循RESTful原则的Web服务。 REST(Representational State Transfer)是一种软件架构风格,用于设计网络应用程序...

    使用 Spring 3 来创建 RESTful Web Services

    **Spring 3 创建 RESTful Web Services 知识点详解** RESTful Web Services 是一种基于 Representational State Transfer(表述性状态转移)架构风格的 Web 应用设计模式,它强调资源的表述和状态转换,常用于构建...

    Spring使用RESTful的性能优化方案

    在Spring框架中,RESTful API的设计与实现是现代Web服务的核心组成部分。为了提高基于Spring的RESTful服务的性能,我们可以采取一系列优化策略。以下是一些关键的优化方案,结合源码理解和工具应用: 1. **HTTP缓存...

Global site tag (gtag.js) - Google Analytics