Enterprise 中级

Spring Framework 7 API 版本控制

用 Spring Framework 7 的原生 API 版本控制支持替代重复的版本前缀控制器。

✕ Spring Boot 2/3
// Version 1 controller
@RestController
@RequestMapping("/api/v1/products")
public class ProductControllerV1 {
    @GetMapping("/{id}")
    public ProductDtoV1 getProduct(
            @PathVariable Long id) {
        return service.getV1(id);
    }
}

// Version 2 — duplicated structure
@RestController
@RequestMapping("/api/v2/products")
public class ProductControllerV2 {
    @GetMapping("/{id}")
    public ProductDtoV2 getProduct(
            @PathVariable Long id) {
        return service.getV2(id);
    }
}
✓ Spring Framework 7+
// Configure versioning once
@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void configureApiVersioning(
            ApiVersionConfigurer config) {
        config.useRequestHeader("X-API-Version");
    }
}

// Single controller, version per method
@RestController
@RequestMapping("/api/products")
public class ProductController {
    @GetMapping(value = "/{id}", version = "1")
    public ProductDtoV1 getV1(@PathVariable Long id) {
        return service.getV1(id);
    }

    @GetMapping(value = "/{id}", version = "2")
    public ProductDtoV2 getV2(@PathVariable Long id) {
        return service.getV2(id);
    }
}
发现此代码有问题? 告诉我们。
🗂️

无控制器重复

所有版本在一个控制器类中;只有各个处理方法按版本不同。

🔧

灵活版本策略

支持基于 URL、标头和内容协商的版本控制。

🧹

集中版本逻辑

版本配置集中于一处,易于维护。

旧方式
手动 URL 路径版本控制
现代方式
原生 API 版本控制
自 JDK
17
难度
中级
Spring Framework 7 API 版本控制
可用

自 Spring Framework 7.0 起可用(需要 Java 17+)

在 Spring Framework 7 之前,API 版本控制需要单独的控制器类(每个版本一个),或复杂的路径前缀配置。Spring 7 添加了原生版本控制,所有版本共存于同一个控制器类中。

分享 𝕏 🦋 in