- Introduction
- Spring Boot
- RESTful Web Service
- Create a Resource Representation Class
- Create a Resource Controller
- Test the Service
- Test
- Pending
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:
{"id":1,"content":"Hello, World!"}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:
{"id":1,"content":"Hello, User!"}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:
data class Greeting(val id: Long, val content: String)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 = "Hello, %s!"
@RestControllerclass GreetingController {
private val counter = AtomicLong(0)
@GetMapping("/greeting") fun greeting(@RequestParam name: String = "World") = Greeting(counter.fetchAndAdd(1), template.format(name))
}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