java 单机接口限流处理方案
330
2022-06-06
在写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。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~