在 Spring Boot WebFlux 上检索路径变量(功能方法)

Posted

技术标签:

【中文标题】在 Spring Boot WebFlux 上检索路径变量(功能方法)【英文标题】:Retrieve path variable on Spring Boot WebFlux (functional approach) 【发布时间】:2019-01-06 06:00:15 【问题描述】:

假设我有这个路由器定义:

@Component
class PersonRouter(private val handler: PersonHandler) 
  @Bean
  fun router(): RouterFunction<ServerResponse> = router 
    ("/api/people" and accept(MediaType.APPLICATION_JSON_UTF8)).nest 
      GET("/id")  handler.findById(it) 
    
  

然后是这个处理程序:

@Component
@Transactional
class PersonHandler(private val repository: PersonRepository) 
  private companion object : KLogging()

  @Transactional(readOnly = true)
  fun findById(req: ServerRequest): Mono<ServerResponse> 
    logger.info  "$req.method() $req.path()" 
    val uuid = ? // req.pathContainer().elements().last().value()
    return ServerResponse.ok()
        .contentType(MediaType.APPLICATION_JSON_UTF8)
        .body(BodyInserters.fromObject(repository.findById(uuid)))
        .switchIfEmpty(ServerResponse.notFound().build())
  

我如何从ServerRequest 访问标识符(典型的@RestController 上的@PathVariable id: String)而不使用正则表达式、繁重的字符串等操作?

【问题讨论】:

我不知道你想要实现什么,但 WebFlux 目前不支持事务注释。 【参考方案1】:

啊!找到了!

通过这样做:req.pathVariable("id")

它一直都在那里......在官方Spring Framework(Web Reactive)文档中!

【讨论】:

以上是关于在 Spring Boot WebFlux 上检索路径变量(功能方法)的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot 自动配置的 Jackson ObjectMapper 默认不用于 WebFlux WebClient

如何在 Spring Boot WebFlux 中使用 GET 请求注销

如何在 Spring Boot WebFlux 上使用 AWS X-Ray 跟踪传入请求?

如何在 Spring boot 2 + Webflux + Thymeleaf 中配置 i18n?

带有 Webflux 的 Spring Boot:请求的资源上不存在“Access-Control-Allow-Origin”标头

1 个 Spring Boot 应用程序中的 Spring mvc 和 webflux