@PathVariable注解

2023-05-16

转自:http://www.cnblogs.com/FFFFF/p/4624140.html

使用@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请求下添加一个隐藏域(),然后在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>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

@PathVariable注解 的相关文章

  • Android系统Camera图片反转的一个问题

    一 问题提出 目前遇到项目问题 xff0c Camera预览图像是反的 xff0c 于是考虑设置180度反转以便正常 通过如下两种方式 xff1a params setRotation 180 java部分 p set CameraPara
  • I2C总线的SDA和SCL

    串行数据线SDA 负责在设备间传输串行数据 串行时钟线SCL 负责产生同步时钟脉冲 SCL SDA是I2C总线的信号线 I2C总线是共享的总线系统 xff0c 因此可以将多个I2C设备连接到该系统上 连接到I2C中总线上的设备既可以用作主设
  • ubuntu18.04输入密码登录不进去一直循环

    我是把ubuntu分辨率调了之后变成这样的 其实这个解决方法我也很无语 自己乱按弄到的 就是在登录的隔壁 xff0c 勾选第二个就可以了QUQ 评论区所知 xff1a 选择这个话 xff0c 会关掉nvidia显卡 选择wayland进入后
  • rhce2

    1 配置chrony时间服务器 xff0c 确保客户端主机能和服务主机同步时间 两台机器 第一台机器作为时间服务器从ntp aliyun com同步时间 xff08 注意包含意外情况 xff0c 如果不能上外网 xff0c 不能从阿里云同步
  • FFmpeg Android编译运行出现 Abort message: 'JniInvocation instance already initialized'

    signal 5 SIGTRAP code 1 TRAP BRKPT fault addr 0x272000000d03 Abort message JniInvocation instance already initialized 把
  • layui图标用法总结

    本文参考官方文档 layui图标使用官方文档 xff0c 建议先看此文章 xff0c 并结合本文的前两个步骤使用即可 1 下载layui js相关文档 xff0c layui js下载 xff0c 下载之后里面的内容如下 xff1a 只需要
  • Eggjs学习系列(一) 使用TypeScript快速入门

    Eggjs学习系列 xff08 一 xff09 使用TypeScript快速入门 Eggjs是一个node的渐近式开发框架 xff0c 用于服务端开发 而 TypeScript 是 JavaScript的超集 xff0c 在兼容 JavaS
  • Golang实现小型CMS内容管理功能(二):前端接入百度ueditor富文本编辑器

    当我们把接口都做好以后 xff0c 我们需要去开发前端界面 添加文章功能里面 xff0c 最重要的就是文章内容部分 xff0c 需要配置上富文本编辑器 xff0c 这样才能给我们的内容增加样式 下载ueditor代码 ueditor已经很久
  • 网络分析中数据包结构(含七层模型)

    七层模型 xff1a 包 Packet 是TCP IP协议通信传输中的数据单位 xff0c 一般也称 数据包 有人说 xff0c 局域网中传输的不是 帧 Frame 吗 xff1f 没错 xff0c 但是TCP IP协议是工作在OSI模型第
  • ubuntu下PyCharm遇到问题

    第三方库没有自动补全功能 xff08 autocomplete xff09 190921补充 xff1a 这个问题就是环境配置的问题当初真是无知 原因 xff1a PyCharm的人工编译环境和程序的运行环境不是同一个 xff08 说的太不

随机推荐

  • 用java简单的实现单链表的基本操作

    此代码仅供参考 xff0c 如有疑问欢迎评论 xff1a package com tyxh link 节点类 public class Node protected Node next 指针域 protected int data 数据域
  • 算法:海量日志数据,提取出某日访问百度次数最多的那个IP

    首先是这一天 xff0c 并且是访问百度的日志中的IP取出来 xff0c 逐个写入到一个大文件中 注意到IP是32位的 xff0c 最多有个2 32个IP 同样可以采用映射的方法 xff0c 比如模1000 xff0c 把整个大文件映射为1
  • 使用JUnit测试预期异常

    开发人员常常使用单元测试来验证的一段儿代码的操作 xff0c 很多时候单元测试可以检查抛出预期异常 expected exceptions 的代码 在Java语言中 xff0c JUnit是一套标准的单元测试方案 xff0c 它提供了很多验
  • BlockingQueue深入分析

    1 BlockingQueue 定义的常用方法如下 抛出异常特殊值阻塞超时插入add e offer e put e offer e time unit 移除remove poll take poll time unit 检查element
  • 聚合类新闻客户端产品功能点详情分析

    产品功能点 功能 今日头条 百度新闻 鲜果 ZAKER 媒体订阅 个性化内容推荐 个性化订阅 RSS 视频新闻 评论盖楼 搜索新闻 离线下载 地方新闻 一键分享 收藏 推送 天气 夜间模式 线上活动 主题设置 感兴趣 语音读文章 字体设置
  • 聚合类新闻客户端初体验

    初体验的产品 xff1a 今日头条 ios3 6 百度新闻 ios4 4 0 ZAKER ios4 4 5 鲜果 ios3 8 7 中搜搜悦 ios4 0 1 Flipboard ios2 3 9 1 Flipboard 一款国外很火的ap
  • 聚合类新闻客户端的改进

    zaker和鲜果是最早的聚合类新闻产品 xff0c 前几年发展很快 xff0c 迅速占领了市场 xff0c 但近两年发展变得缓慢 xff0c 而今日头条自发布以来才两年 xff0c 用户量就迅速超过了zaker和鲜果 xff0c 使用起来非
  • 单例模式优缺点

    主要优点 xff1a 1 提供了对唯一实例的受控访问 2 由于在系统内存中只存在一个对象 xff0c 因此可以节约系统资源 xff0c 对于一些需要频繁创建和销毁的对象单例模式无疑可以提高系统的性能 3 允许可变数目的实例 主要缺点 xff
  • 适配器模式优缺点

    优点 xff1a 1 将目标类和适配者类解耦 2 增加了类的透明性和复用性 xff0c 将具体的实现封装在适配者类中 xff0c 对于客户端类来说是透明的 xff0c 而且提高了适配者的复用性 3 灵活性和扩展性都非常好 xff0c 符合开
  • Oracle 的 Round函数

    Round函数用法 xff1a 截取数字 格式如下 xff1a ROUND xff08 number decimals xff09 其中 xff1a number 待做截取处理的数值 decimals 指明需保留小数点后面的位数 可选项 x
  • Ubuntu安装卸载软件

    VMware 1 首先 xff0c 官网下载 vmware 虚拟机 2 转到下载目录下 给vmware升权限 sudo chmod 43 x VMware Workstation Full 15 1 0 13591040 x86 64 bu
  • eclipse报错:Failed to load the JNI shared library

    电脑自装系统以来 xff0c 好久没有写java代码了 xff0c 所以一直也没用 eclipse IDE xff0c 今天将eclipse打开 xff0c 报了个问题 xff0c Failed to load the JNI shared
  • ACM 鸡兔同笼 线性代数linear algebra

    想模仿线性代数变化的步骤写程序但总感觉失去了灵魂 java Scanner sc 61 new Scanner System in int head 61 sc nextInt int leg 61 sc nextInt int arr 6
  • 使用Example_where_Cause出现 Column 'goods_id' in where clause is ambiguous解决办法

    改写SSM项目https www bilibili com video BV18J411k7SF from 61 search amp seid 61 7715680395343362130出现 Column 39 goods id 39
  • 在CLI中打印表格----gotable使用介绍

    目录 介绍 获取gotable 在github中获取 下载源码 git clone go mod API 创建table 从结构体中创建空table 获取版本信息 获取版本列表 打印表格 给表格添加行 给表格添加多个行 给表格添加列 介绍
  • 抽象类和普通类

    包含抽象方法的类称为抽象类 xff0c 但并不意味着抽象类中只能有抽象方法 xff0c 它和普通类一样 xff0c 同样可以拥有成员变量和普通的成员方法 注意 xff0c 抽象类和普通类的主要有三点区别 xff1a 1 抽象方法必须为pub
  • 优化器(Optimizer)(SGD、Momentum、AdaGrad、RMSProp、Adam)

    文章目录 3 1 传统梯度优化的不足 BGD SGD MBGD 3 1 1 一维梯度下降3 1 2 多维梯度下降 3 2 动量 Momentum 3 3 AdaGrad算法3 4 RMSProp算法3 5 Adam算法 优化器在机器学习 深
  • ViewBinding绑定布局

    最近这段时间在学习Kotlin xff0c 突然发现谷歌已经把kotlin android extensions插件废弃 xff0c 目前推荐使用ViewBinding来进行替代 xff0c 接下来通过本文给大家分享Android使用Vie
  • element-ui更改图标icon大小

    element ui改变icon大小 在template里面加入div lt div class 61 34 change icon 34 gt lt i class 61 34 el icon switch button 34 gt lt
  • @PathVariable注解

    转自 xff1a http www cnblogs com FFFFF p 4624140 html 使用 64 PathVariable可以快速的访问 xff0c URL中的部分内容 在 64 RequestMapping的value中使