Kotlin Polyglot Tutorial
This tutorial demonstrates using Kotlin within WoOF.
While the tutorial is simple, it is entirely written in Kotlin.
As Kotlin compiles to classes, much of the existing features of WoOF can be used as is. Furthermore, as this tutorial also demonstrates, Kotlin functions can be used.
Enable Kotlin
To enable using Kotlin, add the following to your pom.xml:
<dependency>
<groupId>net.officefloor.kotlin</groupId>
<artifactId>officekotlin</artifactId>
</dependency>
Kotlin
The Kotlin to service the request is:
package net.officefloor.tutorial.kotlinhttpserver
import net.officefloor.web.ObjectResponse
fun service(request: KotlinRequest, response: ObjectResponse<KotlinResponse>) {
response.send(KotlinResponse("Hello ${request.name} from Kotlin"))
}
REST Endpoint
The REST endpoint routing POST requests to '/' to the Kotlin function is configured as follows:
Kotlin:
resource: net.officefloor.tutorial.kotlinhttpserver.KotlinLogicKt
procedure: Kotlin
method: service
Kotlin Data Objects
As part of supporting Kotlin, the necessary Jackson support is included to enable sending/receiving Kotlin data classes as JSON.
The request / response data classes are as follows:
@HttpObject
data class KotlinRequest(val name: String)
data class KotlinResponse(val message: String)
Testing
As Kotlin is integrated well with Java, the following demonstrates writing tests with Kotlin:
@RegisterExtension
@JvmField
public val server = MockWoofServerExtension()
@Test
fun service() {
val response = this.server.send(MockWoofServer.mockJsonRequest(HttpMethod.POST, "/", KotlinRequest("Daniel")));
response.assertJson(200, KotlinResponse("Hello Daniel from Kotlin"));
}
JUnit 4 example:
@Rule
@JvmField
public val server = MockWoofServerRule()
@Test
fun service() {
val response = this.server.send(MockWoofServer.mockJsonRequest(HttpMethod.POST, "/", KotlinRequest("Daniel")));
response.assertJson(200, KotlinResponse("Hello Daniel from Kotlin"));
}
Next
The next tutorial covers Scala.

