Versionnage d'API dans Spring Framework 7
Remplace les contrôleurs dupliqués avec préfixe de version par le support natif de versionnage d'API de Spring Framework 7.
// 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);
}
}
// 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);
}
}
Sans duplication de contrôleurs
Toutes les versions vivent dans une seule classe de contrôleur ; seules les méthodes handler individuelles portent un attribut de version.
Stratégie de version centralisée
Changez d'en-tête à URL ou paramètre de requête en un seul appel à configureApiVersioning.
Évolution incrémentale
Ajoutez une nouvelle version à une méthode sans toucher les endpoints non liés ni créer de nouveaux fichiers de contrôleur.
Disponible depuis Spring Framework 7.0 (nécessite Java 17+)
Avant Spring Framework 7, le versionnage d'API nécessitait des classes de contrôleur séparées par version (par exemple /api/v1/products, /api/v2/products), dupliquant les mappings de requêtes et dispersant la logique de version dans de nombreux fichiers. Spring Framework 7 introduit le versionnage natif via un nouvel attribut version dans @RequestMapping et les annotations connexes, plus un hook configureApiVersioning dans WebMvcConfigurer. La version peut être résolue depuis un en-tête de requête, un segment de chemin URL ou un paramètre de requête — tout contrôlé en un seul endroit.