app版本控制java后端接口版本管理

embedded/2025/1/18 17:52:02/

java_api_version__java_0">java api version 版本控制 java接口版本管理

1 自定义 AppVersionHandleMapping
java">自定义AppVersionHandleMapping实现RequestMappingHandlerMapping里面的方法
public class AppVersionHandleMapping extends RequestMappingHandlerMapping
{@Overrideprotected RequestCondition<?> getCustomTypeCondition(Class<?> handlerType){AppVersion annotation = handlerType.getAnnotation(AppVersion.class);return annotation == null ? null : new AppVersionCondition(new VersionItem(annotation.value()));}@Overrideprotected RequestCondition<?> getCustomMethodCondition(Method method){AppVersion annotation = method.getAnnotation(AppVersion.class);return annotation == null ? null : new AppVersionCondition(new VersionItem(annotation.value()));}
}
2 自定义注解
java">@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface AppVersion
{String value() default "1.0.0";
}
3 实现RequestCondition里面的方法
java">@Data
public class AppVersionCondition implements RequestCondition<AppVersionCondition> {private VersionItem versionItem;public AppVersionCondition(VersionItem versionItem) {this.versionItem = versionItem;}@Overridepublic AppVersionCondition combine(AppVersionCondition other) {// 选择大版本return versionItem.compareTo(other.getVersionItem()) >= 0 ? new AppVersionCondition(this.getVersionItem()) : new AppVersionCondition(other.getVersionItem());}@Overridepublic AppVersionCondition getMatchingCondition(HttpServletRequest request) {String appVersion = RequestUtil.getAppVersion(request);VersionItem item = new VersionItem(appVersion);// 获取所有小于等于版本的接口if (item.compareTo(this.versionItem) >= 0)return this;return null;}@Overridepublic int compareTo(AppVersionCondition other, HttpServletRequest request) {// 获取最大版本对应的接口return other.getVersionItem().compareTo(this.versionItem);}
4 最后把自定义的AppVersionHandleMapping注入MVC管理
java">@Configuration
public class WebConfig implements WebMvcConfigurer, WebMvcRegistrations {@Overridepublic RequestMappingHandlerMapping getRequestMappingHandlerMapping() {return new AppVersionHandleMapping();}
5 版本比对工具
java">@Data
public class VersionItem implements Comparable<VersionItem> {private String appVersion;public VersionItem(String appVersion) {// 截取前三位String[] split = appVersion.split("\\.");if (split.length > 3)appVersion = split[0] + "." + split[1] + "." + split[2];this.appVersion = appVersion;}@Overridepublic int compareTo(@NotNull VersionItem o) {return compareVersion(o.getAppVersion());}/*** 判断版本** @param version 版本*/private int compareVersion(String version) {String[] version1 = appVersion.split("\\.");String[] version2 = version.split("\\.");int i1 = 0;int i2 = 0;int n1 = version1.length;int n2 = version2.length;for (int i = 0; i < Math.max(n1, n2); i++) {i1 = i < n1 ? Integer.parseInt(version1[i]) : 0;i2 = i < n2 ? Integer.parseInt(version2[i]) : 0;if (i1 != i2)return Integer.compare(i1, i2);}return 0;}
6 参考

https://blog.51cto.com/u_13521/9789790


http://www.ppmy.cn/embedded/155010.html

相关文章

学习threejs,使用RollControls相机控制器

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.RollControls 相机控…

STM32程序发生异常崩溃时,怎样从串口输出当时的程序调用栈等信息

当STM32程序发生异常崩溃时&#xff0c;为了从串口输出当时的程序调用栈信息&#xff0c;并使用Keil等工具确定具体的函数信息&#xff0c;你可以按照以下步骤操作&#xff1a; 启用调试信息输出&#xff1a; 在STM32程序中&#xff0c;你需要先确保启用了调试信息的输出。这通…

【网络】DNS解析流程

DNS全称叫做域名系统。 DNS域名主要是通过 . 来进行分割层级的&#xff0c;越往后层级级别越大&#xff08;符合外国人起的名称&#xff09; 我们访问的url如&#xff1a;www.baidu.com其实在最后还有一个 . ->www.baidu.com. 最后一个点代表根域名 . 根域 在最顶层&…

html中鼠标位置信息

pageX&#xff1a;鼠标距离页面的最左边的距离&#xff0c;包括滚动条的长度。clientX&#xff1a;鼠标距离浏览器视口的左距离&#xff0c;不包括滚动条。offsetX&#xff1a;鼠标到事件源左边的距离。movementX&#xff1a;鼠标这次触发的事件的位置相对于上一次触发事件的位…

Qt——QTableWidget 限制单元格输入范围的方法(正则表达式输入校验法、自定义代理类MyItemDelegrate)

【系列专栏】:博主结合工作实践输出的,解决实际问题的专栏,朋友们看过来! 《项目案例分享》 《极客DIY开源分享》 《嵌入式通用开发实战》 《C++语言开发基础总结》 《从0到1学习嵌入式Linux开发》

专业130+总分410+西安交通大学815/869原909信号与系统考研电子信息与通信工程。真题,大纲,参考书。

read-normal-img 考研成功上岸西安交通大学&#xff0c;总分410&#xff0c;专业课815/909-现在的869信号与系统&#xff08;含DSP&#xff09;130&#xff0c;总结一下自己的复习经历&#xff0c;希望给大家有些帮助。 专业课&#xff1a;815/869原909信号与系统和dsp 教材&…

设计模式(4)行为模式

行为模式 1. Chain of Responsibility Pattern&#xff08;责任链模式&#xff09;2.Command Pattern&#xff08;命令模式&#xff09;3.Interpreter Pattern&#xff08;解释器模式&#xff09;▲4.Iterator&#xff08;迭代器模式&#xff09;5.Mediator&#xff08;中介者模…

MySQL系列之数据授权(安全)

导览 前言Q&#xff1a;如何对MySQL数据库进行授权管理一、MySQL的“特权” 1. 权限级别2. 权限清单 二、授权操作 1. 查看权限2. 分配权限3. 回收权限 结语精彩回放 前言 看过博主上一篇的盆友&#xff0c;可以Get到一个知识点&#xff1a;数据授权&#xff08;eg&#xff…