Spring Boot 4.0 发布首个快照版本


Spring 官方已经发布了 Spring Boot 4.0 的快照版本,内置 Spring Framework 7.0

Spring Framework 7.0 引入了对 API 版本控制的原生支持,为服务器端和客户端应用程序提供了强大的工具,以高效处理版本特定的路由和请求。

API 版本控制是现代 Web 开发中的关键实践,它允许开发者在不破坏现有客户端的情况下管理 API 的演进和变更,确保向后兼容性的同时引入新功能。

基础使用:RequestMapping version 属性

Spring Framework 7.0 在 @RequestMapping 及其变体注解中新增了 version 属性,让版本控制变得更加简洁和直观。

@RequestMapping
@RestController
publicclassDemoController {

    @GetMapping(version = "1")
    public String version1() {
        return"API Version 1.0.0";
    }

    @GetMapping(version = "2")
    public String version2() {
        return"API Version 2.0.0";
    }
}

版本解析配置:ApiVersionConfigurer

通过实现 WebMvcConfigurer 接口并重写 configureApiVersioning 方法,可以自定义版本解析策略。

@Configuration
publicclassWebConfigurationimplementsWebMvcConfigurer {

    @Override
    publicvoidconfigureApiVersioning(ApiVersionConfigurer configurer) {
        // 方式 1:使用请求参数(默认参数名为 "version")
        configurer.useRequestParam("version");

        // 方式 2:使用请求头
        // configurer.useRequestHeader("API-Version");

        // 方式 3:使用路径变量
        // configurer.usePathVariable("version");
    }
}

常见的版本控制策略

1. 请求参数方式?version=1

2. 请求头方式API-Version: 1

3. 路径变量方式/api/v1/users

4. Accept 头方式Accept: application/vnd.api+json;version=1

调用测试

使用请求参数进行版本控制的测试示例:

# 调用版本 1 的 API
curl "http://localhost:8080/?version=1"
# 输出:API Version 1.0.0

# 调用版本 2 的 API
curl "http://localhost:8080/?version=2"
# 输出:API Version 2.0.0

# 不指定版本(可能返回默认版本或错误)
curl "http://localhost:8080/"

高级配置:自定义版本解析器

对于复杂的业务场景,可以实现自定义的版本解析逻辑:

@Configuration
publicclassWebConfigurationimplementsWebMvcConfigurer {

    @Override
    publicvoidconfigureApiVersioning(ApiVersionConfigurer configurer) {
        configurer.useVersionResolver(newApiVersionResolver() {
            @Override
            public@Nullable String resolveVersion(HttpServletRequest request) {
                // 示例 1:从用户代理字符串解析版本
                StringuserAgent= request.getHeader("User-Agent");
                if (userAgent != null && userAgent.contains("mobile")) {
                    return"mobile";
                }

                // 示例 2:基于客户端 IP 或其他业务规则
                StringclientIp= getClientIp(request);
                if (isTestEnvironment(clientIp)) {
                    return"beta";
                }

                // 默认版本
                return"1";
            }
        });
    }
}

总结

• 1.用户发起请求,进入 RequestMappingHandlerMapping,用于确定应该调用哪个 Controller 方法。

• 2.RequestMappingHandlerMapping 调用 ApiVersionStrategy,提取请求中的 API 版本号。

• 3.返回 API 版本号后,进行初步筛选符合条件的 Controller 方法。

• 4.选择出最佳匹配的 Controller 方法。

通过 Spring Boot 4.0 的原生版本控制支持,开发者可以更优雅地管理 API 的演进,提升系统的可维护性和用户体验。


相關推薦

2022-10-22

Spring Boot 3.0 首个 RC 已发布,此外还为两个分支发布了更新:2.7.5 & 2.6.13。 3.0.0-RC1 发布公告写道,此版本包含 135 项功能增强、文档改进、依赖升级和 Bugfix。 Spring Boot 3.0 的开发工作始于实验性的 Spring Native,旨在为 Graa

2022-07-11

,排除鉴权的 url 依然会被拦截的问题 升级 spring-boot 到 2.5.14 更新内容 一、支持webSocket接口鉴权 增加 webSocket 接口的通用鉴权拦截器,使用方式如下: @ServerEndpoint(value = "/websocket/test", configur

2023-08-06

io.gitlab.arturbosch.detekt 版本 v1.23.1 特性: 增强 Spring-Boot 配置提示 特性: 增强单元测试套件断言失败提示 依赖: 更新 com.google.guava:guava 版本 v32.1.2-jre 特性: 支持标记忽略事件溯源接口(IgnoreSourcing)

2023-03-24

复:主要针对v4.0版本的异常bug、ui兼容性问题修复 🎄Spring Cloud Gateway网关聚合组件升级:提供手动、服务发现两种模式,轻松聚合OpenAPI文档 主要更新 🐛常规bug修复 1、网关聚合组件knife4j-gateway-spring-boot-starter针对OpenAPI3

2023-07-22

时、爽快)!以知名开源项目“小诺”为例: “snowy-spring 版” 启动 15-50秒 “snowy-solon 版” 启动3-5秒,内存节省1/3(有兴趣的,欢迎拉取代码体验) 所谓:“时间就是生命,效率就是金钱”,“天下武功,唯快

2024-10-29

Spring Boot3.4.0-RC1 现已发布。此版本包含 142 项增强功能、文档改进、依赖项升级和错误修复。 值得注意的新功能包括: 更新了 Buildpacks 支持,支持 ARM 和 x86 架构 更新的ClientHttpRequestFactory支持,包括新的构建器和对更多

2022-07-09

的更多内容可查看 JetBrains 中国的博客 。 支持 Spring 6 和 Spring Boot 3 的特性 IntelliJ IDEA 2022.2 完全支持 Spring 6 和 Spring Boot 3 的新特性,包括新的 @AutoConfiguration 类和 @ConfigurationProperties 类。 支持使用

2024-09-30

SOFABoot 是蚂蚁金服开源的基于 Spring Boot 的研发框架,它在 Spring Boot 的基础上,提供了诸如 Readiness Check,类隔离,日志空间隔离等等能力。在增强了 Spring Boot 的同时,SOFABoot 提供了让用户可以在 Spring Boot 中非常方便地使用 SOFA

2022-10-14

Spring Framework 6.0 发布了首个 RC 版本。 发布公告写道,Spring Framework 6.0 作为重大更新,目前 RC1 要求使用 Java 17 或更高版本,并且已迁移到 Jakarta EE 9+(在jakarta命名空间中取代了以前基于javax的 EE API),以及对其他基础设施

2023-04-23

Spring Boot 3.1.0 首个 RC 版本已发布。 此版本包含 112 项功能增强、文档改进、依赖升级和 Bugfixes。以下是值得关注的变化: 改进测试容器支持,包括开发时的支持 改进 Docker 镜像构建 支持 Docker Compose 增强 SSL 配置 改进

2024-04-20

Spring Boot 3.3.0 首个 RC 版本现已发布。此版本包括 93 项功能增强、文档改进、依赖项升级和错误修复。 值得关注的变化包括: 自动配置对带有 SNI 的嵌入式 Web Server  SSL 的支持 支持 Prometheus Client 1.x 完成文档向 Antor

2024-07-03

洞」为核心,采用领域驱动模型(DDD)设计思想,完全基于 Spring 生态全域开源技术和 OAuth2.1 协议,支持智能电视、IoT等物联网设备认证,满足国家三级等保要求、支持接口国密数字信封加解密、防刷、高防XSS和SQL注入等一系列安

2024-02-23

Hibernate/MyBatis+ plus +Sharding JDBC + Jpa+ Spring data+ GraphQL+ App ORM (Android, 鸿蒙)= Bee 小巧玲珑!仅 860K, 还不到 1M, 但却是功能强大! V2.4.0.2 (2024 元宵节) 1.chaing SQL编程支持占位符预编译,防止注入攻击;增加update,delete的chaing编程支持

2023-05-25

了一次“庖丁解牛”,拆解出 Dante Engine 组件库出,为从 Spring Security OAuth2 迁移至 Spring Authorization Server 做前序铺垫。 2022.05.20 首个基于 Spring Authorization Server 的、全新架构的 Dante Cloud 版本发布 2022.07.01 基于 Vue3、Vite2、Pinia、Q