Python 官方文档:入门教程 => 点击学习
目录一、根据目录结构生成接口前缀二、自定义RequestMappingInfo三、测试一、根据目录结构生成接口前缀 在写api的接口时,通常有很多版本的迭代,比如:v1、v2。 如图
在写api的接口时,通常有很多版本的迭代,比如:v1、v2。
如图所示,建立的包结构。
列举v1版本,每新建一个controller都要写上@RequestMapping("/v1/****")的路由的前缀,如果v1下面还有几个包结构,这样路由就要写的很麻烦。
我们可以通过当前api下的目录结构自动加上请求前缀。
在spring里有一个专门处理拥有@RequestMapping()注解的控制器的类(RequestMappingHandlerMapping),因为我们要修改控制器的路由。
public class AutoPrefixUrlMapping extends RequestMappingHandlerMapping {
@Value("${api-package}")
private String apiPackagePath;
@Override
protected RequestMappingInfo getMappingForMethod(Method method, Class<?> handlerType) {
RequestMappingInfo mappingForMethod = super.getMappingForMethod(method, handlerType);
String prefix = getPrefix(handlerType);
if (mappingForMethod!=null){
return RequestMappingInfo.paths(prefix).build().combine(mappingForMethod);
}
return mappingForMethod;
}
private String getPrefix(Class<?> handlerType){
String packageName = handlerType.getPackage().getName();
String doPath = packageName.replaceAll(this.apiPackagePath, "");
return doPath.replace('.', '/');
}
}
@Component
public class AutoPrefixConfiguration implements WebMvcRegistrations {
@Override
public RequestMappingHandlerMapping getRequestMappingHandlerMapping() {
return new AutoPrefixUrlMapping();
}
}
在v1包下新建一个controller
@RestController()
@RequestMapping("/banner")
public class BannerController {
@GetMapping("/test")
public String test() {
return "你好 hello";
}
}
启动主程序,测试接口Http://localhost:8080/v1/banner/test,
自动合并了路由,v1是自动拼接的。
将controller移动到v2的sample包下,controller的请求路径没有修改。
这是重新服务再访问http://localhost:8080/v2/sample/banner/test。
成功访问,不管目录多么复杂都实现了根据目录结构生成路由前缀,不用修改控制器的requestMapping。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。
--结束END--
本文标题: SpringBoot如何根据目录结构生成API接口前缀
本文链接: https://lsjlt.com/news/139638.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-03-01
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0