Cel: napisać minimalną aplikację, która będzie odpowiadała tekstem na żądanie GET.
Rozwiązanie:
Struktura:
rest-minimal
├── build.gradle.kts
└── src
└── main
└── kotlin
└── dev
└── galinski
└── jedendziennie
└── restminimal
├── App.kt
└── Controller.kt
App.kt
package dev.galinski.jedendziennie.restminimal
import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.runApplication
@SpringBootApplication
class RestMinimalApplication { }
fun main(args: Array<String>) {
runApplication<RestMinimalApplication>(*args)
}
Controller.kt
package dev.galinski.jedendziennie.restminimal
import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.RestController
@RestController
class MinController {
@GetMapping("/")
fun main(): String {
return "minim"
}
}
@SpringBootApplication
- anotacja 3 w 1, włącza wszystko co trzeba, żeby w danej klasie działała Springowa autokonfiguracja.- Anotacje
@RestController
i cała rodzina@Mapping
służą do definiowania rutingu zapytań do odp. klas i metod.
Budowanie
Konfiguracja gradle’a - nie całkiem minimalna (w prawdziwym projekcie lepiej użyć Spring Initializera).
build.gradle.kts
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
plugins {
kotlin("jvm") version "1.4.21"
kotlin("plugin.spring") version "1.4.21"
id("org.springframework.boot") version "2.2.2.RELEASE"
id("io.spring.dependency-management") version "1.0.8.RELEASE"
id("application")
}
java.sourceCompatibility = JavaVersion.VERSION_1_8
repositories {
mavenCentral()
}
dependencies {
implementation("org.springframework.boot:spring-boot-starter-web")
implementation("org.jetbrains.kotlin:kotlin-reflect")
}
tasks.withType<KotlinCompile> {
kotlinOptions {
jvmTarget = "1.8"
}
}
application {
mainClassName = "dev.galinski.jedendziennie.restminimal.AppKt"
}
Warto zauważyć:
- Spring (Boot?) wymaga swojej własnej wtyczki do zarządzania zależnościami. Bez niej się nie zbuduje, nawet jeśli nie jest używana jawnie.
- Spring wymaga też kotlinowej biblioteki do refleksji i podania wersji Javy.