Enterprise Intermedio

Reemplaza los controladores duplicados con prefijo de versión por el soporte nativo de versionado de 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);
    }
}
¿Ves un problema con este código? Cuéntanos.
🗂️

Sin duplicación de controladores

Todas las versiones viven en una sola clase de controlador; solo los métodos handler individuales llevan un atributo de versión.

⚙️

Estrategia de versión centralizada

Cambia de encabezado a URL o parámetro de consulta en una sola llamada a configureApiVersioning.

📈

Evolución incremental

Añade una nueva versión a un método sin tocar endpoints no relacionados ni crear nuevos archivos de controlador.

Enfoque Antiguo
Versionado manual por ruta URL
Enfoque Moderno
Versionado nativo de API
Desde JDK
17
Dificultad
Intermedio
Versionado de API en Spring Framework 7
Disponible

Disponible desde Spring Framework 7.0 (requiere Java 17+)

Antes de Spring Framework 7, el versionado de API requería clases de controlador separadas por versión (por ejemplo, /api/v1/products, /api/v2/products), duplicando los mapeos de solicitudes y dispersando la lógica de versiones en muchos archivos. Spring Framework 7 introduce versionado nativo a través de un nuevo atributo version en @RequestMapping y anotaciones relacionadas, más un hook configureApiVersioning en WebMvcConfigurer. La versión puede resolverse desde un encabezado de solicitud, un segmento de ruta URL o un parámetro de consulta — todo controlado en un solo lugar.

Compartir 𝕏 🦋 in