背景介绍
在做后端API接口的时候,被前端同事吐槽以前的接口URL没有遵循Restful API 规范,所以开会讨论,最终拍板确定,新做的要接口定义要照着标准规范来。
找了找关于Restful API的文章,还是这位大佬说的容易理解:
http://www.ruanyifeng.com/blog/2014/05/restful_api.html
里面讲到了API的版本号。
这里跟组员协商确定后,URL要也同样要突出版本号。所以在某个版本阶段开发的API接口,要指明URL的版本号。
在实际代码中,发现如下问题:
如果把"v1"这类词直接写到controller的映射中,那就变成类似如下:
@GetMapping("/v1/user/info")
这样每个实际url都要写一遍重复的"v1",不够灵活。
有没有方法,可以直接在指定的url上,前面全部拼接上v1呢?
因此这里就抛出一个问题:Spring Boot 如何修改请求url?
问题描述
Spring Boot 如何修改请求url?
关键词: Spring Boot add url prefix
解决方案
自定义注解@ApiVersion
, 设置注解修饰的方法,在请求映射 request mapping 上添加前缀值。
具体值直接传入注解,即可。
实现代码
自定义注解 @ApiVersion
@Target({
ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface ApiVersion {
int[] value();
}
配置注解 @ApiVersion 生效
自定义bean ApiVersionRequestMappingHandlerMapping
, 重写 RequestMappingHandlerMapping
public class ApiVersionRequestMappingHandlerMapping extends RequestMappingHandlerMapping {
private final String prefix;
public ApiVersionRequestMappingHandlerMapping(String prefix) {
this.prefix = prefix;
}
@Override
protected RequestMappingInfo getMappingF