Web
ルーター DSL
Spring Framework には、3 つのフレーバーで利用可能な Kotlin ルーター DSL が付属しています。
これらの DSL を使用すると、次の例に示すように、クリーンで慣用的な Kotlin コードを記述して RouterFunction
インスタンスを作成できます。
@Configuration
class RouterRouterConfiguration {
@Bean
fun mainRouter(userHandler: UserHandler) = router {
accept(TEXT_HTML).nest {
GET("/") { ok().render("index") }
GET("/sse") { ok().render("sse") }
GET("/users", userHandler::findAllView)
}
"/api".nest {
accept(APPLICATION_JSON).nest {
GET("/users", userHandler::findAll)
}
accept(TEXT_EVENT_STREAM).nest {
GET("/users", userHandler::stream)
}
}
resources("/**", ClassPathResource("static/"))
}
}
この DSL はプログラマチックです。つまり、if 式、for ループ、その他の Kotlin 構造を介して Bean のカスタム登録ロジックを許可します。これは、動的データ(たとえば、データベースから)に応じてルートを登録する必要がある場合に役立ちます。 |
具体例については、MiXiT プロジェクト [GitHub] (英語) を参照してください。
MockMvc DSL
Kotlin DSL は、MockMvc
Kotlin 拡張を介して提供され、より慣用的な Kotlin API を提供し、発見性を向上させます(静的メソッドの使用なし)。
val mockMvc: MockMvc = ...
mockMvc.get("/person/{name}", "Lee") {
secure = true
accept = APPLICATION_JSON
headers {
contentLanguage = Locale.FRANCE
}
principal = Principal { "foo" }
}.andExpect {
status { isOk }
content { contentType(APPLICATION_JSON) }
jsonPath("$.name") { value("Lee") }
content { json("""{"someBoolean": false}""", false) }
}.andDo {
print()
}
Kotlin スクリプトテンプレート
Spring Framework は、JSR-223 (英語) をサポートする ScriptTemplateView
(Javadoc) を提供し、スクリプトエンジンを使用してテンプレートをレンダリングします。
scripting-jsr223
依存関係を活用することで、そのような機能を使用して、kotlinx.html [GitHub] (英語) DSL または Kotlin 複数行補間 String
で Kotlin ベースのテンプレートをレンダリングできます。
build.gradle.kts
dependencies {
runtime("org.jetbrains.kotlin:kotlin-scripting-jsr223:${kotlinVersion}")
}
通常、構成は ScriptTemplateConfigurer
および ScriptTemplateViewResolver
Bean で行われます。
KotlinScriptConfiguration.kt
@Configuration
class KotlinScriptConfiguration {
@Bean
fun kotlinScriptConfigurer() = ScriptTemplateConfigurer().apply {
engineName = "kotlin"
setScripts("scripts/render.kts")
renderFunction = "render"
isSharedEngine = false
}
@Bean
fun kotlinScriptViewResolver() = ScriptTemplateViewResolver().apply {
setPrefix("templates/")
setSuffix(".kts")
}
}
詳細については、kotlin-script-templating [GitHub] (英語) サンプルプロジェクトを参照してください。
Kotlin マルチプラットフォーム直列化
Kotlin マルチプラットフォーム直列化 [GitHub] (英語) は、Spring MVC、Spring、WebFlux、Spring メッセージング (RSocket) でサポートされています。組み込みサポートは現在、CBOR、JSON、ProtoBuf 形式をターゲットとしています。
これを有効にするには、それらの指示 [GitHub] (英語) に従って、関連する依存関係とプラグインを追加します。Spring MVC および WebFlux では、Kotlin 直列化と Jackson の両方がクラスパスにある場合、デフォルトで構成されます。Spring メッセージング (RSocket) では、自動構成が必要な場合は Jackson、GSON、JSONB のいずれもクラスパスにないことを確認してください。Jackson が必要な場合は、手動で KotlinSerializationJsonMessageConverter
を構成します。