【问题标题】:ServerWebExchange attributes are emptyServerWebExchange 属性为空
【发布时间】:2018-08-14 09:34:22
【问题描述】:

我有基于 WebFlux 构建的基于 Spring Boot 注释的控制器。我实现了WebFilter,在WebFilter 内部我调用了serverWebExchange.getAttributes(),它返回了4 个属性,这很好。但在那之后它停止工作,现在它总是返回空属性映射。我没有更改控制器中的任何内容,但即使我这样做了,我仍然应该获得这些属性。为什么它停止工作?

【问题讨论】:

  • 您可能导入了导致应用程序转换为 servlet 的内容。如果 web 和 webflux 都在类路径上,则默认为 MVC。尝试在您的属性中设置spring.main.web-application-type=REACTIVE 看看会发生什么?
  • @Brian 嗨,我调试了SpringApplication#deduceWebApplicationType 并且为我的应用程序选择了REACTIVE,即使我没有在application.properties 中设置它并且我没有@EnableWebFlux 注释。可能是因为我使用spring-boot-starter-webflux

标签: spring filter spring-webflux


【解决方案1】:

当我第一次这样做时它会起作用:

this.handlerMapping.getHandler(serverWebExchange)

其中handlerMappingRequestMappingHandlerMapping 类型的bean,您可以从WebFlux 注入。

这行代码初始化serverWebExchange属性。有问题我写道,它工作过一次,然后就停止了。原因是我当时正在试验handlerMapping,它使它工作,然后我删除它并且属性停止被初始化。调试表明,通常这些属性是在应用WebFilters 之后设置的。这行代码使它更早地初始化。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-30
    • 2018-03-11
    相关资源
    最近更新 更多