Prev Next

Spring / Spring Boot 4 Basics Interview Questions

What is native API versioning in Spring Boot 4 and how do you use it?

API versioning has historically been one of the most DIY aspects of Spring development -- teams built custom URL paths, header filters, or RequestCondition hacks. Spring Framework 7 (and Spring Boot 4) makes API versioning a first-class feature with native annotation-based support in both Spring MVC and WebFlux.

Supported versioning strategies
StrategyExampleConfiguration
Path-basedGET /api/v1/orders, GET /api/v2/ordersspring.mvc.apiversion.use-path=true
Header-basedX-API-Version: 1spring.mvc.apiversion.use-header=X-API-Version
Query parameterGET /orders?version=1spring.mvc.apiversion.use-param=version
Media type (Accept header)Accept: application/json;version=1spring.mvc.apiversion.use-media-type=true
// Spring Boot 3: manual versioning (repetitive and fragile)
@RestController
@RequestMapping("/api/v1/products")
public class ProductControllerV1 { ... }

@RestController
@RequestMapping("/api/v2/products")
public class ProductControllerV2 { ... }

// Spring Boot 4: native versioning
@RestController
@RequestMapping("/api/products")
public class ProductController {

    @GetMapping(path = "/{id}", version = "1.0")
    public ProductV1 getProductV1(@PathVariable String id) {
        return productService.findV1(id);
    }

    @GetMapping(path = "/{id}", version = "2.0")
    public ProductV2 getProductV2(@PathVariable String id) {
        return productService.findV2(id);
    }
}

// Configuration in application.properties:
# Header-based versioning:
spring.mvc.apiversion.use-header=X-API-Version
spring.mvc.apiversion.default=1
# Request: GET /api/products/123 with header X-API-Version: 2
# Routes to: getProductV2

// Deprecation handling (RFC 9745 compliant):
@GetMapping(path = "/{id}", version = "1.0", deprecated = true)
public ProductV1 getProductV1(@PathVariable String id) {
    // Spring automatically adds Deprecation response header
    return productService.findV1(id);
}

RFC 9745 compliance: Spring Boot 4 automatically adds the Deprecation HTTP response header when a versioned endpoint is marked as deprecated, giving API consumers programmatic notification of deprecation without custom filter code.

In Spring Boot 4, what annotation attribute enables native API versioning on a @GetMapping?
What HTTP response header does Spring Boot 4 automatically add for deprecated versioned endpoints?

More Related questions...

What is Spring Boot 4 and when was it released? What is the complete modularisation of Spring Boot 4 and why does it matter? What is the Java version baseline in Spring Boot 4 and what Java features does it unlock? What is Jakarta EE 11 and what changes does it bring in Spring Boot 4? How does Spring Boot 4 auto-configuration work and what is the new @AutoConfiguration annotation? What is native API versioning in Spring Boot 4 and how do you use it? What are JSpecify nullability annotations in Spring Boot 4 and why are they important? What changed with Jackson in Spring Boot 4 and what are the migration considerations? What are @Retryable and @ConcurrencyLimit in Spring Boot 4 and how do they work? What are HTTP Service Clients in Spring Boot 4 and how do you define them? What are the key breaking changes removed in Spring Boot 4 that were deprecated in Boot 3? How does Spring Boot 4 handle dependency injection and what are the core stereotypes? What is Spring Boot's application.properties / application.yml and how does configuration work? What are Spring Boot profiles and how do you use them for environment-specific configuration? How does Spring Boot 4 testing work with @SpringBootTest and test slices? What is Spring Boot Actuator and what does it provide in Boot 4? How does Spring Boot 4 handle data access with Spring Data JPA? What is Spring Security in Spring Boot 4 and what are the key Boot 4 changes? What is the Spring Boot starter parent (POM) and how do you set up a Spring Boot 4 project? What is @SpringBootApplication and what does it combine? How do you build REST APIs with Spring Boot 4 using @RestController? How does Bean Validation work with Spring Boot 4? What is Spring Boot's embedded server and how do you configure it? What is Spring Boot's transaction management with @Transactional? What is Spring Boot's caching abstraction and how do you use it? What is Spring Boot's observability stack in Boot 4 with Micrometer and OpenTelemetry? How does Spring Boot 4 support GraalVM native images? What is Spring WebFlux and reactive programming in Spring Boot 4? What is Spring Boot's exception handling with @RestControllerAdvice? How do you use Spring Data MongoDB and other NoSQL stores in Spring Boot 4? How does Spring Boot 4 handle async processing with @Async? What is Spring Boot's externalized configuration with @Value and @ConfigurationProperties? What is Spring Boot's messaging support with Kafka in Boot 4? How do you schedule tasks in Spring Boot 4 with @Scheduled? What is Spring AI and how does it integrate with Spring Boot 4? How does Spring Boot 4 handle logging configuration? What is Spring Boot 4 migration from Boot 3: complete checklist and common pitfalls? What is Spring Boot DevTools and how does it improve development productivity? How does Spring Boot 4 support containerised deployments with Docker? What is the Spring Boot 4 vs Spring Boot 3 comparison and what are the key takeaways?
Show more question and Answers...


Comments & Discussions