Spring Webflux路由器

18-10-30 banq
         

本文将引导您完成使用Spring Webflux路由器创建端点的过程。假设在Spring MVC中,我们正在使用@ControllerWebFlux。

路由器功能

传入请求被路由到处理函数RouterFunction<T>,它具有与@RequestMapping注释类似的功能:

@Configuration
public class WebConfig {

  @Autowired
  private PersonRepository personRepository;

  @Bean
  public RouterFunction<ServerResponse> routes(){
    return RouterFunctions
      .route(GET("/persons"),
      request -> ServerResponse.ok().body(personRepository.findAll(), Person.class))
      .andRoute(GET("/persons/{id}"),
      request -> ServerResponse.ok().body(personRepository.findById(request.pathVariable("id")), Person.class));
  }

}

最初的Spring Web MVC在Tomcat上运行,专门为Servlet API和Servlet容器构建。反应式Web框架Spring WebFlux是完全无阻塞的,支持Reactive Streams并在Netty服务器上运行,但最后从客户端的角度来看,我们以相同的方式对其进行了访问。

因此,在将上面配置类添加到项目并运行Spring Boot之后,您可以访问:http:// localhost:8080/ persons 响应格式如下:

[
  {
    "uuid": "7baac840-0ff1-4eea-a1f3-78a6320f5bcc",
    "nickname": "edzero",
    "email": "edzero@email.com"
  },
  {
    "uuid": "7b098510-e260-4dc2-8b15-24fc403eb939",
    "nickname": "skuarch",
    "email": "skuarch@email.com"
  },

通过id获取指定一个人信息的端点: http://localhost:8080/persons/5904ff32-7e36-4a81-b90f-c0d7a91214eb

{
  "uuid": "5904ff32-7e36-4a81-b90f-c0d7a91214eb",
  "nickname": "josdem",
  "email": "josdem@email.com"
}

结论

简要总结一下:

  • Spring Boot现在采用了反应式编程
  • 路由器功能路由到处理函数
  • 路由器功能可以在响应式Web运行时中运行
  • WebFlux与Java函数编程完美结合
  • WebFlux默认在Netty服务器上运行

请转到此处下载项目。