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 を構成します。