このバージョンはまだ開発中であり、まだ安定しているとは見なされていません。最新の安定バージョンについては、Spring Framework 6.2.2 を使用してください!

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 マルチプラットフォーム直列化

Kotlin マルチプラットフォーム直列化 [GitHub] (英語) は、Spring MVC、Spring、WebFlux、Spring メッセージング (RSocket) でサポートされています。組み込みサポートは現在、CBOR、JSON、ProtoBuf 形式をターゲットとしています。

これを有効にするには、それらの指示 [GitHub] (英語) に従って、関連する依存関係とプラグインを追加します。Spring MVC および WebFlux では、Kotlin 直列化と Jackson の両方がクラスパスにある場合、デフォルトで構成されます。Spring メッセージング (RSocket) では、自動構成が必要な場合は Jackson、GSON、JSONB のいずれもクラスパスにないことを確認してください。Jackson が必要な場合は、手動で KotlinSerializationJsonMessageConverter を構成します。