Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 未找到Spring响应请求上下文映射错误_Java_Spring_Spring Webflux_Spring Reactive - Fatal编程技术网

Java 未找到Spring响应请求上下文映射错误

Java 未找到Spring响应请求上下文映射错误,java,spring,spring-webflux,spring-reactive,Java,Spring,Spring Webflux,Spring Reactive,我使用过滤器将当前ServerWebExchange上下文存储在spring提供的上下文映射中。 但是,当我尝试从代码的不同部分(下游)获取保存的ServerWebExchange上下文时,我会从上下文映射中获取一个空上下文,该上下文映射对应于键EXCHANGE\u context\u属性 Context ctx = Mono.subscriberContext() .map(ServerWebExchangeContextFilter::get) asser

我使用过滤器将当前ServerWebExchange上下文存储在spring提供的上下文映射中。 但是,当我尝试从代码的不同部分(下游)获取保存的ServerWebExchange上下文时,我会从上下文映射中获取一个空上下文,该上下文映射对应于键
EXCHANGE\u context\u属性

Context ctx = Mono.subscriberContext()
                  .map(ServerWebExchangeContextFilter::get)
assert ctx.isPresent()==true // This assert always fails
ServerWebExchangeContextFitler类具有以下定义:

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);
    }

}
公共类ServerWebExchangeContextFilter实现WebFilter{
公共静态最终字符串交换\u上下文\u属性=
ServerWebExchangeContextFilter.class.getName()+“.EXCHANGE\U上下文”;
@凌驾
公共Mono筛选器(服务器WebExchange exchange、WebFilterChain链){
返回链。过滤器(交换)
.subscriberContext(cxt->cxt.put(交换上下文属性,交换));
}
公共静态可选get(上下文){
返回context.getOrEmpty(交换上下文属性);
}
}

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

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

您能展示一下实现吗?