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

相关推荐

  1. Mybatis使用名称

    2023-12-21 15:28:01       59 阅读
  2. Rust 语言 println! 宏格式

    2023-12-21 15:28:01       38 阅读
  3. js ${} 使用

    2023-12-21 15:28:01       50 阅读
  4. node-mysql中?使用

    2023-12-21 15:28:01       46 阅读
  5. go 中 fmt

    2023-12-21 15:28:01       57 阅读
  6. 哈哈哈哈

    2023-12-21 15:28:01       59 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-21 15:28:01       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-21 15:28:01       106 阅读
  3. 在Django里面运行非项目文件

    2023-12-21 15:28:01       87 阅读
  4. Python语言-面向对象

    2023-12-21 15:28:01       96 阅读

热门阅读

  1. html 内外边距区别以及解释

    2023-12-21 15:28:01       58 阅读
  2. 武汉大学:如何应对来自邮件的APT攻击?

    2023-12-21 15:28:01       52 阅读
  3. SQL面试题挑战02:同时最大在线人数问题

    2023-12-21 15:28:01       64 阅读
  4. 数据可视化Matplotlib

    2023-12-21 15:28:01       58 阅读
  5. vue 全局定时更新 轮询

    2023-12-21 15:28:01       60 阅读
  6. 改变图片亮度的 Python 实现算法

    2023-12-21 15:28:01       66 阅读
  7. 【AI-1】卷积神经网络

    2023-12-21 15:28:01       39 阅读
  8. 创建局域网git裸仓库

    2023-12-21 15:28:01       50 阅读
  9. Shell脚本应用(二)

    2023-12-21 15:28:01       55 阅读
  10. Docker Swarm集群的深度总结

    2023-12-21 15:28:01       54 阅读