在这篇文章中,我们将研究在Spring WebFlux中为不同的逻辑域定义多个路由器功能。 如果您正在创建“微服务”,则可能不会出现问题,因为您很可能仅在每个服务的单个域中工作,但是如果不是这样,则可能需要在应用程序中包含多个域,用户或您自己的服务可以进行交互。 做到这一点的代码就像我希望的那样简单,可以用几句话来解释。 为了使本文更加有趣,我们将看一些使这一切成为可能的Spring代码。
如果您不熟悉WebFlux,建议您阅读我以前的文章[使用Spring WebFlux做事]( https://lankydanblog.com/2018/03/15/doing-stuff-with-spring-webflux/ ),在这里,我写了一些有关该主题的详尽示例和解释。
因此,让我们先设置场景。 您的应用程序内有两个不同的域,例如人和地点。 您可能希望不仅在逻辑上而且在代码内使它们彼此分开。 为此,您需要一种独立于彼此域定义路由的方法。 这就是我们将在这篇文章中看到的内容。
如果您认为您已经知道该问题的答案,那么您可能是对的。 真的就是这么简单。 让我们继续努力吧。 要仅为人员域创建路由,请创建一个RouterFunction
bean,该bean映射到相关的处理程序函数,如下所示。
@Configuration
public class MyRouter {
// works for a single bean
@Bean
public RouterFunction<ServerResponse> routes(PersonHandler personHandler) {
return RouterFunctions.route(GET("/people/{id}").and(accept(APPLICATION_JSON)), personHandler::get)
.andRoute(GET("/people").and(accept(APPLICATION_JSON)), personHandler::all)
.andRoute(POST("/people").and(accept(APPLICATION_JSON)).and(contentType(APPLICATION_JSON)), personHandler::post)
.andRoute(PUT("/people/{id}").and(accept(APPLICATION_JSON)).and(contentType(APPLICATION_JSON)), personHandler::put)
.andRoute(DELETE("/people/{id}"), personHandler::delete)
.andRoute(GET("/people/country/{country}").and(accept(APPLICATION_JSON)), personHandler::getByCount