Introduction
The Spring Framework provides first-class support for Kotlin and lets developers write Kotlin applications almost as if the Spring Framework was a native Kotlin framework. Most of the code samples of the reference documentation are provided in Kotlin in addition to Java.
Spring Boot
Spring Boot is a framework that simplifies the creation of stand-alone, Spring based applications.
Create a new “JVM Application” with Amper
To enable Spring Boot support, add the following to the module.yaml file:
settings:
springBoot: enabledMixed projects (containing Java and Kotlin sources simultaneously) are supported.
Examples of Spring Boot projects:
RESTful Web Service
You will build a service that will accept HTTP GET requests at http://localhost:8080/greeting.
It will respond with a JSON representation of a greeting, as the following listing shows:
You can customize the greeting with an optional name parameter in the query string, as the following listing shows:
http://localhost:8080/greeting?name=UserThe name parameter value overrides the default value of World and is reflected in the response, as the following listing shows:
Create a Resource Representation Class
The service will handle GET requests for /greeting, optionally with a name parameter in the query string. The GET request should return a 200 OK response with JSON in the body that represents a greeting. It should resemble the following output:
"id": 1,
"content": "Hello, World!"
}The id field is a unique identifier for the greeting, and content is the textual representation of the greeting.
To model the greeting representation, create a resource representation class. To do so, provide a data class for the id and content data, as the following listing shows:
This application uses the Jackson JSON library to automatically marshal instances of type Greeting into JSON. Jackson is included by default by the web starter.
Create a Resource Controller
In Spring’s approach to building RESTful web services, HTTP requests are handled by a controller. These components are identified by the @RestController annotation, and the GreetingController class shown in the following listing handles GET requests for /greeting by returning a new instance of the Greeting class:
private const val template
private val counter
fun
}Building a RESTful Web Service
Test the Service
http://localhost:8080/greeting?name=david
Test
Spring Boot provides a @SpringBootTest annotation that works by creating the ApplicationContext used in your tests through SpringApplication. In addition to @SpringBootTest a number of other annotations are also provided for testing more specific slices of an application.
By default, @SpringBootTest will not start a server. You can use the webEnvironment attribute of @SpringBootTest to further refine how your tests run:
- WebTestClient vs MockMvc in Spring Boot
- Testing Spring Boot Applications
- Testing the Web Layer
- Kotest