首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring Reactive Request Context Map未找到错误

Spring Reactive Request Context Map未找到错误
EN

Stack Overflow用户
提问于 2020-08-12 01:18:54
回答 1查看 305关注 0票数 1

我使用ServerWebExchangeContextFilter过滤器在spring提供的上下文映射中存储当前的ServerWebExchange上下文。但是,当我尝试从代码的不同部分(下游)获取这个已保存的ServerWebExchange上下文时,我从针对键EXCHANGE_CONTEXT_ATTRIBUTE的上下文映射中获得了一个空上下文。

代码语言:javascript
复制
Context ctx = Mono.subscriberContext()
                  .map(ServerWebExchangeContextFilter::get)
assert ctx.isPresent()==true // This assert always fails

ServerWebExchangeContextFitler类具有以下定义:

代码语言:javascript
复制
public class ServerWebExchangeContextFilter implements WebFilter {
    public static final String EXCHANGE_CONTEXT_ATTRIBUTE =
            ServerWebExchangeContextFilter.class.getName() + ".EXCHANGE_CONTEXT";


    @Override
    public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
        return chain.filter(exchange)
                .subscriberContext(cxt -> cxt.put(EXCHANGE_CONTEXT_ATTRIBUTE, exchange));
    }

    public static Optional<ServerWebExchange> get(Context context) {
        return context.getOrEmpty(EXCHANGE_CONTEXT_ATTRIBUTE);
    }

}

我正在为我的组织编写一个通用库函数,因此希望避免在参数元组中传递ServerHttpRequest。因此,请发布一个答案,使我能够从静态函数访问上下文。

EN

回答 1

Stack Overflow用户

发布于 2020-08-12 04:53:48

我找到了解决这个问题的办法。显然,我试图从一个孤立的函数中获取保存的上下文。通过将这个Mono添加到我原始控制器的执行链中,我能够解决这个问题。这是因为ServerWebExchangeContextFilter将上下文保存在我的控制器的执行链中。现在,因为我想添加一个获取请求上下文的库方法,所以我必须使用平面映射将此函数链接到我的控制器。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63363256

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档