【问题标题】:Non-reactive Spring web with kotlin functional router带有 kotlin 功能路由器的非反应式 Spring Web
【发布时间】:2018-04-03 22:18:42
【问题描述】:

我可以使用新的 Kotlin DSL 来设置路由吗,例如:

router {
    ("/blog" and accept(TEXT_HTML)).nest {
        GET("/", fooHandler::findAllView)
        GET("/{slug}", fooHandler::findOneView)
    }
    ("/api/blog" and accept(APPLICATION_JSON)).nest {
        GET("/", barHandler::findAll)
        GET("/{id}", barHandler::findOne)
    }
}

使用非响应式 Web 部件?从某种意义上说,底层数据库将是 Postgres 和基于非 Reactive servlet 的应用程序服务器,因此我不想/不需要使用 Flux 或 Mono 来返回 barHandler 或存储库函数类型。但我确实喜欢与 Kotlin 一起使用的新路由器 DSL,它比基于注释的 @RequestMapping 更强大,并且更容易掌握所有应用程序路由。

【问题讨论】:

  • Spring MVC 应用程序中的“非反应式 Web 部件”是什么意思?
  • @BrianClozel 想像使用 Spring-WebMVC 但使用 Kotlin 功能 DSL 来编写路由器而不使用注释。所有的例子都说你可以为 WebFlux 使用 DSL 和注解,但从来没有提到它是否与 WebMVC 相同,或者我们只是在那里使用注解?
  • @SašaŠijak 您可以使用非弹簧网络框架(同时保留您想要的所有弹簧部件)。此类框架的示例有:Ktor、Javalin 和(我最喜欢,尽管没有 websockets)http4k
  • @pabl0rg 我知道,但我的问题是我是否可以将 WebFlux 包的这个特定部分与 WebMVC 一起使用

标签: spring spring-webflux spring-dsl


【解决方案1】:

您示例中的 DSL 是 Spring WebFlux 的一部分,这是您所说的“反应式”事物。在这个官方博客post 中,该功能被介绍为“Spring WebFlux functional DSL”。

DSL 入口点router 定义在包org.springframework.web.reactive.function.server 中,这也验证了我之前所说的。您可以在GitHub 上查看。

您可以在传统 Web MVC 中使用什么:功能性 bean 声明 DSL,用于以如下方式定义您的应用程序 bean:

beans {
    bean<Foo>()
    bean { Bar(ref()) }
}

【讨论】:

  • 我确认不可能将 Kotlin 路由器 DSL 与 Spring MVC 一起使用,它只支持基于注释的编程模型,而不支持功能模型。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-02
  • 2017-07-23
  • 2016-04-24
  • 2020-08-24
  • 2019-10-02
  • 2016-09-10
  • 2017-05-19
相关资源
最近更新 更多