restful api框架,spring3 的restful API RequestMapping介紹

 2023-10-05 阅读 32 评论 0

摘要:原文鏈接:http://www.javaarch.net/jiagoushi/694.htm spring3 的restful API RequestMapping介紹 在spring mvc中 @RequestMapping是把web請求映射到controller的方法上。 1.RequestMapping Basic Example 將http請求映射到controller方法的最直接方式 1.1 @R

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

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  

restful api框架,?

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/4/118480.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息