当前位置: 首页 > news >正文

Spring MVC框架支持RESTful,设计URL时可以使用{自定义名称}的占位符@Get(“/{id:[0-9]+}/delete“)

背景:在开发实践中,如果没有明确的规定URL,可以参考:

  • 传统接口
    获取数据列表,固定接口路径:/数据类型的复数
    • 例如:/albums/select
  • RESTful接口
    - 根据ID获取某条数据:/数据类型的复数/{id} - 例如:/albums/select/{id:[0-9]+}
    - 根据ID对某条数据执行某种操作:/数据类型的复数/{id}/命令,或/数据类型的复数/{id}/数据属性/命令 - 例如:/albums/{id:[0-9]+}/delete

Spring MVC框架很好的支持了RESTful,在设计URL时,可以使用{自定义名称}的占位符表示此处应该是某个参数值,在此请求参数上使用@PathVariable注解,例如:

1.URL占位符设计接口

@PostMapping("/{id}/delete")
public ??? delete(@PathVariable Long id) {// 暂不关心方法的实现
}

或者 如果占位符中的名称,和请求参数的名称不一致,需要在@PathVariable注解中配置占位符名称

@PostMapping("/{id}/delete")
public ??? delete(@PathVariable("id") Long albumId) {// 暂不关心方法的实现
}
  • 实际效果
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

当设计成以上格式,则客户端提交请求时,占位符位置无论是什么值,都可以匹配上以上设计的路径!注意:如果客户端提交的请求路径中,占位符位置的内容无法被转换成String类型时,将出现400错误。

2.URL正则设计接口

在设计占位符时,可以在占位符名称的右侧、在右大括号的左侧添加1个冒号,并在冒号的右侧可以添加正则表达式,以限制参数值的基本格式,例如:

@PostMapping("/{id:[0-9]+}/delete")
public ??? delete(@PathVariable Long id) {// 暂不关心方法的实现
}

如果客户端提交的请求路径中,占位符位置的内容不匹配以上正则表达式时,将出现404错误。
另外,使用了占位符及互斥的正则表达式的配置,是允许共存的,例如:

@Get("/{id:[0-9]+}")
public ??? getStandardById(@PathVariable Long id) {// 暂不关心方法的实现
}@Get("/{name:[a-z]+}")
public ??? getStandardByName(@PathVariable String name) {// 暂不关心方法的实现
}

注意: 如果以上两个方法的占位符值都是纯数字的,那么一个url将可以匹配以上2个正则表达式,
则Spring MVC框架无法选取,将出现错误!

3.URL占位符跟传统接口共存,优先使用精准匹配的传统接口

另外不使用占位符的配置,与使用了占位符的配置,是允许共存的,例如:

@Get("/{name:[a-z]+}")
public ??? getStandardByName(@PathVariable String name) {// 暂不关心方法的实现
}@Get("/test")
public ??? testStandardByName(String name) {// 暂不关心方法的实现
}

当提交了对应 /test 的请求时,会执行以上第2个方法,即精准匹配的方法,而不会执行使用了占位符的方法。

创造价值,乐哉分享!
一起入门后端 204146007

http://www.lryc.cn/news/264160.html

相关文章:

  • 【GoLang】哪些大公司正在使用Go语言
  • 美团外卖商超商品销量数据
  • 【C++高阶(八)】单例模式特殊类的设计
  • Linux之进程(五)(进程控制)
  • 63. 不同路径 II 23.12.21(二)
  • 【线性代数】两个向量组等价,其中一个向量组线性无关,另一个向量组也是线性无关吗?
  • c语言:指针作为参数传递
  • YOLOv5性能评估指标->mAP、Precision、Recall、FPS、Confienc (讲解论文关注的主要指标)
  • 陶建辉在 CIAS 2023 谈“新能源汽车的数字化”
  • PSP - 结构生物学中的机器学习 (NIPS MLSB Workshop 2023.12)
  • 某领先的集成电路研发中心:建立跨网交换平台 杜绝数据泄露风险
  • map|动态规划|单调栈|LeetCode975:奇偶跳
  • 从安全性角度,看“可信数字底座”有何价值
  • 软件设计模式:UML类图
  • 力扣题目学习笔记(OC + Swift)15. 三数之和
  • 想将电脑屏幕共享到iPhone上,但电脑是Linux系统,可行吗?
  • 大华 DSS 城市安防数字监控系统 SQL 注入漏洞
  • vue中的侦听器和组件之间的通信
  • maven-shade-plugin有什么用
  • 本地部署 OpenVoice
  • 【模式识别】解锁降维奥秘:深度剖析PCA人脸识别技术
  • 大模型赋能“AI+电商”,景联文科技提供高质量电商场景数据
  • 深度比较(lodash 的 isEqual 方法)
  • Ansible常用模块详解(附各模块应用实例和Ansible环境安装部署)
  • QT中网络编程之发送Http协议的Get和Post请求
  • Java 并发编程 —— Fork/Join 框架的原理详解
  • 3-10岁孩子语文能力培养里程碑
  • Vue+ElementUi 基于Tree实现动态节点添加,节点自定义为输入框列
  • Web前端-JavaScript(js数组和函数)
  • 判断数据是否为整数--函数设计与实现