此版本仍在开发中,尚未稳定。如需最新的稳定版本,请使用 Spring Framework 7.0.6spring-doc.cadn.net.cn

Web

路由器DSL

Spring Framework 随附一个 Kotlin 路由 DSL,有 3 种不同的风格:spring-doc.cadn.net.cn

这些DSL允许您编写简洁且符合习惯的Kotlin代码,如以下示例所示,以构建一个RouterFunction实例:spring-doc.cadn.net.cn

@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 项目 以获取具体示例。spring-doc.cadn.net.cn

MockMvc DSL

通过 MockMvc 个 Kotlin 扩展提供了一个 Kotlin DSL,以提供更符合 Kotlin 风格的 API,并允许更好的可发现性(不使用静态方法)。spring-doc.cadn.net.cn

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 多平台序列化 在 Spring MVC、Spring WebFlux 和 Spring Messaging(RSocket)中受支持。内置支持目前针对 CBOR、JSON 和 ProtoBuf 格式。spring-doc.cadn.net.cn

要启用它,请遵循这些指示来添加相关的依赖项和插件。对于Spring MVC和WebFlux,如果Kotlin序列化在类路径中且没有其他变体(如Jackson),则默认会进行配置。如有需要,可手动配置转换器或编解码器。spring-doc.cadn.net.cn