Enterprise Intermédiaire

Remplace les contrôleurs dupliqués avec préfixe de version par le support natif de versionnage d'API de Spring Framework 7.

✕ 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);
    }
}
Un problème avec ce code ? Dites-le nous.
🗂️

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.

Ancienne Approche
Versionnage manuel par chemin URL
Approche Moderne
Versionnage natif d'API
Depuis JDK
17
Difficulté
Intermédiaire
Versionnage d'API dans Spring Framework 7
Disponible

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.

Partager 𝕏 🦋 in