spring3 的restful API RequestMapping介绍

简介:
复制代码
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://www.cnblogs.com/rwxwsblog/p/5332953.html,如需转载请自行联系原作者
目录
相关文章
|
7天前
|
安全 Java API
第7章 Spring Security 的 REST API 与微服务安全(2024 最新版)(上)
第7章 Spring Security 的 REST API 与微服务安全(2024 最新版)
27 0
第7章 Spring Security 的 REST API 与微服务安全(2024 最新版)(上)
|
2天前
|
安全 Java API
Spring工厂API与原理
Spring工厂API与原理
23 10
|
11天前
|
安全 Java API
RESTful API设计与实现:Java后台开发指南
【4月更文挑战第15天】本文介绍了如何使用Java开发RESTful API,重点是Spring Boot框架和Spring MVC。遵循无状态、统一接口、资源标识和JSON数据格式的设计原则,通过创建控制器处理HTTP请求,如示例中的用户管理操作。此外,文章还提及数据绑定、验证、异常处理和跨域支持。最后,提出了版本控制、安全性、文档测试以及限流和缓存的最佳实践,以确保API的稳定、安全和高效。
|
14天前
|
小程序 前端开发 API
小程序全栈开发中的RESTful API设计
【4月更文挑战第12天】本文探讨了小程序全栈开发中的RESTful API设计,旨在帮助开发者理解和掌握相关技术。RESTful API基于REST架构风格,利用HTTP协议进行数据交互,遵循URI、客户端-服务器架构、无状态通信、标准HTTP方法和资源表述等原则。在小程序开发中,通过资源建模、设计API接口、定义资源表述及实现接口,实现前后端高效分离,提升开发效率和代码质量。小程序前端利用微信API与后端交互,确保数据流通。掌握这些实践将优化小程序全栈开发。
|
23天前
|
前端开发 Java API
构建RESTful API:Java中的RESTful服务开发
【4月更文挑战第3天】本文介绍了在Java环境中构建RESTful API的重要性及方法。遵循REST原则,利用HTTP方法处理资源,实现CRUD操作。在Java中,常用框架如Spring MVC简化了RESTful服务开发,包括定义资源、设计表示层、实现CRUD、考虑安全性、文档和测试。通过Spring MVC示例展示了创建RESTful服务的步骤,强调了其在现代Web服务开发中的关键角色,有助于提升互操作性和用户体验。
构建RESTful API:Java中的RESTful服务开发
|
27天前
|
XML JSON 安全
谈谈你对RESTful API设计的理解和实践。
RESTful API是基于HTTP协议的接口设计,通过URI标识资源,利用GET、POST、PUT、DELETE等方法操作资源。设计注重无状态、一致性、分层、错误处理、版本控制、文档、安全和测试,确保易用、可扩展和安全。例如,`/users/{id}`用于用户管理,使用JSON或XML交换数据,提升系统互操作性和可维护性。
18 4
|
29天前
|
安全 API 开发者
构建高效可扩展的RESTful API服务
在数字化转型的浪潮中,构建一个高效、可扩展且易于维护的后端API服务是企业竞争力的关键。本文将深入探讨如何利用现代后端技术栈实现RESTful API服务的优化,包括代码结构设计、性能调优、安全性强化以及微服务架构的应用。我们将通过实践案例分析,揭示后端开发的最佳实践,帮助开发者提升系统的响应速度和处理能力,同时确保服务的高可用性和安全。
30 3
|
1月前
|
缓存 前端开发 API
构建高效可扩展的RESTful API:后端开发的最佳实践
【2月更文挑战第30天】 在现代Web应用和服务端架构中,RESTful API已成为连接前端与后端、实现服务间通信的重要接口。本文将探讨构建一个高效且可扩展的RESTful API的关键步骤和最佳实践,包括设计原则、性能优化、安全性考虑以及错误处理机制。通过这些实践,开发者可以确保API的健壮性、易用性和未来的可维护性。
|
17天前
|
缓存 前端开发 API
API接口封装系列
API(Application Programming Interface)接口封装是将系统内部的功能封装成可复用的程序接口并向外部提供,以便其他系统调用和使用这些功能,通过这种方式实现系统之间的通信和协作。下面将介绍API接口封装的一些关键步骤和注意事项。
|
24天前
|
监控 前端开发 JavaScript
实战篇:商品API接口在跨平台销售中的有效运用与案例解析
随着电子商务的蓬勃发展,企业为了扩大市场覆盖面,经常需要在多个在线平台上展示和销售产品。然而,手工管理多个平台的库存、价格、商品描述等信息既耗时又容易出错。商品API接口在这一背景下显得尤为重要,它能够帮助企业在不同的销售平台之间实现商品信息的高效同步和管理。本文将通过具体的淘宝API接口使用案例,展示如何在跨平台销售中有效利用商品API接口,以及如何通过代码实现数据的统一管理。