Codersee
Kotlin on the backend
Codersee
Kotlin on the backend
In this tutorial, we’ll create a simple REST controller using Spring Boot with Kotlin and Gradle. We’ll also discover how easily we can deploy it as a Docker image.
In this tutorial, we’ll create a simple REST controller using Spring Boot with Kotlin and Gradle. We’ll also discover how easily we can deploy it as a Docker image.
In order to implement our REST controller with Spring Boot and Kotlin, we’ll have to add the following dependencies to our project:
implementation("org.springframework.boot:spring-boot-starter-web") implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
(For new projects, we’d recommend creating them using https://start.spring.io)
As the next step, let’s implement a Person data class consisting of two immutable properties: id and a name:
data class PersonResponse(val id: Int, val name: String)
We can now create a PersonController with getPerson function:
@RestController class PersonController { val personId = AtomicInteger() @GetMapping("/person") fun getPerson(@RequestParam(value = "name", defaultValue = "Foo") name: String) = PersonResponse(personId.incrementAndGet(), name) }
This is a very simple function responding to GET requests to /person?name={userValue} and returning a JSON object which represents an instance of PersonResponse.
Finally, we can run our application using one of the Gradle Wrapper tasks:
./gradlew bootRun
Let’s verify the output:
curl localhost:8080/person?name=John curl localhost:8080/person
{"id":1,"name":"John"} {"id":2,"name":"Foo"}
As can be seen, the default value “Foo” is used, when we don’t specify any value for the name parameter in our request.
So at this point, we have a working REST API created with Spring Boot and Kotlin and the last thing we need is Docker integration.
In order to dockerize our application, we will need to create a Dockerfile and put it in the root directory of our project:
FROM openjdk VOLUME /tmp RUN mkdir /work COPY . /work WORKDIR /work RUN /work/gradlew build RUN mv /work/build/libs/*.jar /work/app.jar ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/work/app.jar"]
Let’s exclude unnecessary directories and files from the building process:
.gradle build out
Finally, let’s build the image and create a new container:
docker build --no-cache -t person-app . docker run -it --rm -p 8080:8080 person-app
Once the process is finished, we can repeat steps from step 5 and ensure that everything is working properly.
In this article, we’ve discovered how easy it is to expose a REST endpoint in a containerized Spring Boot application with Kotlin, Gradle, and Docker. If you’d like to see the whole project implementation, please head to our GitHub project.
Finally, if you really enjoyed this post, I’d be very grateful if you’d help it spread by sharing it with your friends. Let’s build a better community together! 🙂
If you have any ideas or comments that you would like to share with us, please let us know in the comments below, by our Facebook page or group, or by using our contact form.