このバージョンはまだ開発中であり、まだ安定しているとは見なされていません。最新の安定バージョンについては、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
を構成します。