Enterprise Intermedio

Sostituisci i controller duplicati con prefisso versione con il supporto nativo al versionamento API di 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);
    }
}
Vedi un problema con questo codice? Faccelo sapere.
🗂️

Nessuna duplicazione del controller

Tutte le versioni risiedono in una sola classe controller; solo i singoli metodi handler portano un attributo di versione.

⚙️

Strategia di versione centralizzata

Passa da header a URL o versionamento con parametro query in una singola chiamata configureApiVersioning.

📈

Evoluzione incrementale

Aggiungi una nuova versione a un metodo senza toccare endpoint non correlati o creare nuovi file controller.

Approccio Vecchio
Versionamento manuale del percorso URL
Approccio Moderno
Versionamento API nativo
Dal JDK
17
Difficoltà
Intermedio
Versionamento API Spring Framework 7
Disponibile

Disponibile da Spring Framework 7.0 (richiede Java 17+)

Prima di Spring Framework 7, il versionamento API richiedeva classi controller separate per versione (es. /api/v1/products, /api/v2/products), duplicando i mapping delle richieste e disperdendo la logica delle versioni su molti file. Spring Framework 7 introduce il versionamento nativo tramite un nuovo attributo version su @RequestMapping e le annotazioni correlate, più un hook configureApiVersioning in WebMvcConfigurer. La versione può essere risolta da un header di richiesta, un segmento del percorso URL o un parametro di query — tutto controllato in un unico posto.

Condividi 𝕏 🦋 in