背景:在开发实践中,如果没有明确的规定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