使用@PathVariable可以快速的访问,URL中的部分内容。

①. 在@RequestMapping的value中使用URI template({变量名}),然后在@RequestMapping注解方法的需要绑定的参数前,使用@PathVariable指定变量名(如果变量名和参数名一致也可以不指定),从而将URL中的值绑定到参数上。

代码:

   1: @RequestMapping("/testPathVariable")

   2: @Controller

   3: public class TestPathVariable {

   4:  

   5:     /*

   6:     * URI模板指定了一个变量名为id的变量,当控制器处理请求时会将 id 替换为正确的值

   7:     *

   8:     * 若请求为 testPathVariable/user/29,则uid=29,输出29

   9:     *

  10:     * */

  11:     @RequestMapping("/user/{id}")

  12:     public String testPathVariable(@PathVariable("id") Integer uid) {

  13:         System.out.println(uid);

  14:         return "success";

  15:     }

  16:  

  17: }

URL:

   1: <a href="testPathVariable/user/29">testPathVariable user 29</a>

②. 一个方法可以有多个@PathVriable注解

URI template 可以这样,全部在方法上

代码:

   1: @RequestMapping("/testPathVariable")

   2: @Controller

   3: public class TestPathVariable {

   4:  

   5:     @RequestMapping("/user/{uid}/book/{bid}")

   6:     public String testMultiplePathVariable(@PathVariable("uid") Integer uid,@PathVariable("bid") Integer bid) {

   7:         System.out.println(uid);

   8:         System.out.println(bid);

   9:         return "success";

  10:     }

  11:  

  12: }

URL:

   1: <a href="testPathVariable/user/29/book/101">testPathVariable user 29 book 101</a>

URI template还可以这样, 加在类和方法上

代码:

   1: @RequestMapping("/testPathVariable/user/{uid}")

   2: @Controller

   3: public class TestPathVariable {

   4:  

   5:     @RequestMapping("/book/{bid}")

   6:     public String testMultiplePathVariable(@PathVariable("uid") Integer uid, @PathVariable("bid") Integer bid) {

   7:  

   8:         System.out.println(uid);

   9:         System.out.println(bid);

  10:         return "success";

  11:     }

  12:  

  13: }

URL:

   1: <a href="testPathVariable/user/29/book/101">testPathVariable user 29 book 101</a>

③. @PathVariable 还可以使用在 map 参数上,但是必须配置<mvc:annotation-driven />

代码:

   1: @RequestMapping("/testPathVariable/user/{uid}")

   2: @Controller

   3: public class TestPathVariable {

   4:  

   5:     @RequestMapping("/book/{bid}")

   6:     public String testMultiplePathVariable_Map(@PathVariable Map<String, String> map) {

   7:         System.out.println(map.get("uid"));

   8:         System.out.println(map.get("bid"));

   9:         return "success";

  10:     }

  11:     

  12: }

URL:

   1: <a href="testPathVariable/user/29/book/101">testPathVariable user 29 book 101</a>

applicationContext.xml

   1: <mvc:annotation-driven></mvc:annotation-driven>

④. URI template 还支持正则表达式 。具体请看API

⑤. 使用@PathVariable可以让我们进行REST风格的编程,简单理解REST:对网络中某一资源的操作使用一个URI进行表示,然后使用状态来(GET、POST、PUT、DELETE)表示某种操作

原来对user进行CURD 使用了@PathVariable之后的CRUD

/user/get?id=10

/user/post?…

/user/update?id=10…

/user/delete?id=10

/user/id=10                RequestMethod.GET

/user/…                       RequestMethod.POST

/user/id=10…            RequestMethod.PUT

/user/id=10               RequestMethod.DELETE

为了使普通表单支持PUT、DELETE请求,可以在POST请求下添加一个隐藏域(<input type="hidden" name="_method" value="PUT、DELETE"/>),然后在web.xml中配置HiddenHttpMethodFilter

对某用户的订单进行CRUD,代码:

   1: @RequestMapping("/testPathVariable/user/{uid}")

   2: @Controller

   3: public class TestPathVariable {

   4:  

   5:     /*

   6:     *获取某用户的所有订单

   7:     * */

   8:     @RequestMapping(value = "/order", method = RequestMethod.GET)

   9:     public String testGET(@PathVariable Integer uid) {

  10:         System.out.println("GET: " + " user-" + uid);

  11:         return "success";

  12:     }

  13:  

  14:     /*

  15:     * 获取某用户的某个订单详情

  16:     * */

  17:     @RequestMapping(value = "/order/{oid}", method = RequestMethod.GET)

  18:     public String testGET_OID(@PathVariable Integer uid, @PathVariable Integer oid) {

  19:         System.out.println("GET_OID: " + " user-" + uid + " order-" + oid);

  20:         return "success";

  21:     }

  22:  

  23:     /*

  24:     * 修改某用户的某个订单的总价

  25:     * params = {"total"}

  26:     *   若加params,则请求中必须有该变量,没有会报错。

  27:     *   如果不加params,则请求中不强制要求包含该变量

  28:     *   不包含时,则parameter中的对应变量值为为Null,

  29:     *       如请求/testPathVariable/user/29/order/101    

  30:     *       则total=null

  31:     *   包含,则parameter中的对应变量值为请求中的值

  32:     *       如请求/testPathVariable/user/29/order/101?total=1000   

  33:     *       则total=1000

  34:     * */

  35:     @RequestMapping(value = "/order/{oid}", method = RequestMethod.PUT, params = {"total"})

  36:     public String testPUT(@PathVariable Integer uid, @PathVariable Integer oid, Integer total) {

  37:         System.out.println("PUT: " + " user-" + uid + " order-" + oid);

  38:         System.out.println(total);

  39:         return "success";

  40:     }

  41:  

  42:     /*

  43:     * 新增某用户的订单,变量略

  44:     * */

  45:     @RequestMapping(value = "/order", method = RequestMethod.POST)

  46:     public String testPOST_(@PathVariable Integer uid) {

  47:         System.out.println("POST: " + " user-" + uid + " order:订单信息");

  48:         return "success";

  49:     }

  50:  

  51:     /*

  52:     * 删除某用户的某个订单

  53:     * */

  54:     @RequestMapping(value = "/order/{oid}", method = RequestMethod.DELETE)

  55:     public String testDELETE(@PathVariable Integer uid, @PathVariable Integer oid) {

  56:         System.out.println("GET: " + " user-" + uid + " order-" + oid);

  57:         return "success";

  58:     }

  59: }

index.jsp:

   1:  

   2: <form action="testPathVariable/user/29/order/101" method="post">

   3:     <input type="hidden" name="_method" value="DELETE"/><br/>

   4:     <input type="submit" value="删除ID为29用户的ID为101的订单"/>

   5: </form>

   6:  

   7: <br/><br/>

   8: <form action="testPathVariable/user/29/order" method="post">

   9:     输入订单信息....<br/>

  10:     <input type="submit" value="ID为29用户新增订单"/>

  11: </form>

  12:  

  13: <br/><br/>

  14:  

  15: <form action="testPathVariable/user/29/order/101" method="post">

  16:     <input type="hidden" name="_method" value="put"/><br/>

  17:     <input type="text" name="total"/><br/>

  18:     <input type="submit" value="修改ID为29用户,ID为101订单的总价"/>

  19: </form>

  20:  

  21: <br/><br/>

  22:  

  23:  

  24: <a href="testPathVariable/user/29/order">获取ID为29用户的所有订单</a>

  25:  

  26: <br/><br/>

  27:  

  28: <a href="testPathVariable/user/29/order/101">获取ID为29的用户,ID为101的订单的详情</a>

  29:  

  30: <br/><br/>

  31:  

在web.xml中配置HiddenHttpMethodFilter:

   1: <filter>

   2:     <filter-name>hiddenHttpMethodFilter</filter-name>

   3:     <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>

   4: </filter>

   5: <filter-mapping>

   6:     <filter-name>hiddenHttpMethodFilter</filter-name>

   7:     <url-pattern>/*</url-pattern>

   8: </filter-mapping>

SpringMVC(三)@PathVariable的更多相关文章

  1. SpringMVC 三种异常处理方式

    SpringMVC 三种异常处理方式 在 SpringMVC, SpringBoot 处理 web 请求时, 若遇到错误或者异常,返回给用户一个良好的错误信息比 Whitelabel Error Pa ...

  2. SpringMVC(三):@RequestMapping中的URL中设定通配符,可以使用@PathVariable映射URL绑定的占位符

    1)带占位符的URL是Spring3.0新增的功能,该功能在SpringMVC向REST目标挺进发展过程中具有里程碑的意义. 2)通过@PathVariable可以将URL中占位符参数绑定到控制器处理 ...

  3. springmvc中@PathVariable和@RequestParam的区别

    顾名思义, @PathVariable和@RequestParam,分别是从路径里面去获取变量,也就是把路径当做变量,后者是从请求里面获取参数. 我的url; http://localhost:808 ...

  4. springmvc中@PathVariable和@RequestParam的区别(百度收集)

    http://localhost:8080/Springmvc/user/page.do?pageSize=3&pageNow=2 你可以把这地址分开理解,其中问号前半部分:http://lo ...

  5. springmvc(三) 参数绑定、

    前面两章就介绍了什么是springmvc,springmvc的框架原理,并且会简单的使用springmvc以及ssm的整合,从这一章节来看,就开始讲解springmvc的各种功能实现,慢慢消化 --W ...

  6. SpringMVC(三):参数绑定、输入输出转换

    一.参数解析绑定 1. 自定义绑定:不绑定某些项 @InitBinder private void initBinder(WebDataBinder dataBinder) { dataBinder. ...

  7. SpringMVC中@pathVariable和@RequestParam注解的区别

    @pathVariable和@RequestParam的区别 @pathVariable:是从路径中获取变量,也就是把路径当做变量 @RequestParam:是从请求里面获取参数 案例分析: /Sp ...

  8. SpringMVC(三) RESTful架构和文件上传下载

    RESTful架构 REST全名为:Representational State Transfer.资源表现层状态转化.是目前最流行的一种互联网软件架构. 它结构清晰.符合标准.易于理解.扩展方便,所 ...

  9. SpringMvc中@PathVariable注解简单的用法

    @PathVariable /** * @PathVariable 可以来映射 URL 中的占位符到目标方法的参数中. * @param id * @return */ jsp页面请求 <a h ...

  10. SpringMVC(三) RequestMapping修饰类

    SpringMVC使用@RequestMapping 注解为控制器指定可以处理哪些URL请求. 可以用于类定义以及方法定义: 类定义:提供初步的请求映射信息.相对于WEB应用的根目录. 方法处:提供进 ...

随机推荐

  1. [CodeForces1059E] Split the Tree

    树形DP. 用倍增处理出来每个点往上能延伸出去的最远路径,nlogn 对于每个节点,如果它能被后代使用过的点覆盖,就直接覆盖,这个点就不使用,否则就ans++,让传的Max改成dp[x] #inclu ...

  2. Centos 修改主机名称

    Centos 配置主机名称: 1.首先查询一下当前的主机名称 [root@localhost~]# hostnamectl status Static hostname: ****** //永久主机名 ...

  3. 洛谷 P3819 松江1843路

    题目描述 涞坊路是一条长L米的道路,道路上的坐标范围从0到L,路上有N座房子,第i座房子建在坐标为x[i]的地方,其中住了r[i]人. 松江1843路公交车要在这条路上建一个公交站,市政府希望让最多的 ...

  4. Set Time, Date Timezone in Linux from Command Line or Gnome | Use ntp

    https://www.garron.me/en/linux/set-time-date-timezone-ntp-linux-shell-gnome-command-line.html Set ti ...

  5. 大红数星星 图论 XD网络赛

    问题 A: 大红数星星 时间限制: 3 Sec  内存限制: 128 MB提交: 1066  解决: 67[提交][状态][讨论版] 题目描述 “三角形十分的美丽,相信大家小学就学过三角形具有稳定性, ...

  6. Java EE: XML Schemas for Java EE Deployment Descriptors(Java Web的web.xml头web-app标签上的XML模式)

    继上几篇文章 http://www.cnblogs.com/EasonJim/p/6221952.html http://www.cnblogs.com/EasonJim/p/6959120.html ...

  7. 具体解释Hibernate中的事务

    1.前言 上一篇博客解说了Hibernate中的一级缓存,属于Session级别的.这篇博客解说一下Hibernate中的事务机制. 有关事务的概念.请參照通俗易懂数据库中的事务.  2.怎样处理Hi ...

  8. eclipse+maven的web项目访问jsp乱码

    在jsp中第一行加一句这个就不会乱码了 <%@ page language="java" import="java.util.*" pageEncodin ...

  9. BNU 34990 Justice String 2014 ACM-ICPC Beijing Invitational Programming Contest

    题目链接:http://acm.bnu.edu.cn/bnuoj/problem_show.php?pid=34990 DEBUG了非常久,还是legal的推断函数写错了... 此题做法.枚举Stri ...

  10. Hadoop Web项目--Friend Find系统

    项目使用软件:Myeclipse10.0,JDK1.7,Hadoop2.6,MySQL5.6.EasyUI1.3.6.jQuery2.0,Spring4.1.3. Hibernate4.3.1,str ...