Check Out Our Amazing ROADMAPS
<?xml version =" 1.0" encoding =" UTF-8" ?>
<project xmlns =" http:https://maven.apache.org/POM/4.0.0" xmlns : xsi =" http:https://www.w3.org/2001/XMLSchema-instance"
xsi : schemaLocation =" http:https://maven.apache.org/POM/4.0.0 http:https://maven.apache.org/xsd/maven-4.0.0.xsd" >
<modelVersion >4.0.0</modelVersion >
<parent >
<groupId >org.springframework.boot</groupId >
<artifactId >spring-boot-starter-parent</artifactId >
<version >3.0.2</version >
<relativePath /> <!-- lookup parent from repository -->
</parent >
<groupId >com.in28minutes.springboot.rest.example</groupId >
<artifactId >spring-boot-2-rest-service-versioning</artifactId >
<version >0.0.1-SNAPSHOT</version >
<packaging >jar</packaging >
<name >spring-boot-2-rest-service</name >
<description >Spring Boot 2 and REST - Example Project</description >
<properties >
<java .version>17</java .version>
</properties >
<dependencies >
<dependency >
<groupId >org.springframework.boot</groupId >
<artifactId >spring-boot-starter-actuator</artifactId >
</dependency >
<dependency >
<groupId >org.springframework.boot</groupId >
<artifactId >spring-boot-starter-data-jpa</artifactId >
</dependency >
<dependency >
<groupId >org.springframework.boot</groupId >
<artifactId >spring-boot-starter-web</artifactId >
</dependency >
<dependency >
<groupId >org.springframework.boot</groupId >
<artifactId >spring-boot-devtools</artifactId >
<scope >runtime</scope >
</dependency >
<dependency >
<groupId >com.h2database</groupId >
<artifactId >h2</artifactId >
<scope >runtime</scope >
</dependency >
<dependency >
<groupId >org.springframework.boot</groupId >
<artifactId >spring-boot-starter-test</artifactId >
<scope >test</scope >
</dependency >
</dependencies >
<build >
<plugins >
<plugin >
<groupId >org.springframework.boot</groupId >
<artifactId >spring-boot-maven-plugin</artifactId >
</plugin >
</plugins >
</build >
<repositories >
<repository >
<id >spring-milestones</id >
<name >Spring Milestones</name >
<url >https://repo.spring.io/milestone</url >
<snapshots >
<enabled >false</enabled >
</snapshots >
</repository >
</repositories >
<pluginRepositories >
<pluginRepository >
<id >spring-milestones</id >
<name >Spring Milestones</name >
<url >https://repo.spring.io/milestone</url >
<snapshots >
<enabled >false</enabled >
</snapshots >
</pluginRepository >
</pluginRepositories >
</project >
/src/main/java/com/in28minutes/springboot/rest/example/SpringBoot2RestServiceApplication.java
package com .in28minutes .springboot .rest .example ;
import org .springframework .boot .SpringApplication ;
import org .springframework .boot .autoconfigure .SpringBootApplication ;
@ SpringBootApplication
public class SpringBoot2RestServiceApplication {
public static void main (String [] args ) {
SpringApplication .run (SpringBoot2RestServiceApplication .class , args );
}
}
/src/main/java/com/in28minutes/springboot/rest/example/versioning/Name.java
package com .in28minutes .springboot .rest .example .versioning ;
public record Name (String firstName ,
String lastName ) {
}
/src/main/java/com/in28minutes/springboot/rest/example/versioning/StudentV1.java
package com .in28minutes .springboot .rest .example .versioning ;
public record StudentV1 (String name ) {
}
/src/main/java/com/in28minutes/springboot/rest/example/versioning/StudentV2.java
package com .in28minutes .springboot .rest .example .versioning ;
public record StudentV2 (Name name ) {
}
/src/main/java/com/in28minutes/springboot/rest/example/versioning/StudentVersioningController.java
package com .in28minutes .springboot .rest .example .versioning ;
import org .springframework .web .bind .annotation .GetMapping ;
import org .springframework .web .bind .annotation .RestController ;
@ RestController
public class StudentVersioningController {
@ GetMapping ("v1/student" )
public StudentV1 studentV1 () {
return new StudentV1 ("Bob Charlie" );
}
@ GetMapping ("v2/student" )
public StudentV2 studentV2 () {
return new StudentV2 (new Name ("Bob" , "Charlie" ));
}
@ GetMapping (value = "/student/param" , params = "version=1" )
public StudentV1 paramV1 () {
return new StudentV1 ("Bob Charlie" );
}
@ GetMapping (value = "/student/param" , params = "version=2" )
public StudentV2 paramV2 () {
return new StudentV2 (new Name ("Bob" , "Charlie" ));
}
@ GetMapping (value = "/student/header" , headers = "X-API-VERSION=1" )
public StudentV1 headerV1 () {
return new StudentV1 ("Bob Charlie" );
}
@ GetMapping (value = "/student/header" , headers = "X-API-VERSION=2" )
public StudentV2 headerV2 () {
return new StudentV2 (new Name ("Bob" , "Charlie" ));
}
@ GetMapping (value = "/student/produces" , produces = "application/vnd.company.app-v1+json" )
public StudentV1 producesV1 () {
return new StudentV1 ("Bob Charlie" );
}
@ GetMapping (value = "/student/produces" , produces = "application/vnd.company.app-v2+json" )
public StudentV2 producesV2 () {
return new StudentV2 (new Name ("Bob" , "Charlie" ));
}
}
/src/main/resources/application.properties
/src/test/java/com/in28minutes/springboot/rest/example/SpringBoot2RestServiceApplicationTests.java
package com .in28minutes .springboot .rest .example ;
import org .junit .jupiter .api .Test ;
import org .junit .jupiter .api .extension .ExtendWith ;
import org .springframework .boot .test .context .SpringBootTest ;
import org .springframework .test .context .junit .jupiter .SpringExtension ;
// replaced @RunWith with @ExtendWith
// replaced SpringRunner.class with SpringExtension.class
@ ExtendWith (SpringExtension .class )
@ SpringBootTest
public class SpringBoot2RestServiceApplicationTests {
@ Test
public void contextLoads () {
}
}