Java 未找到Spring响应请求上下文映射错误
我使用过滤器将当前ServerWebExchange上下文存储在spring提供的上下文映射中。 但是,当我尝试从代码的不同部分(下游)获取保存的ServerWebExchange上下文时,我会从上下文映射中获取一个空上下文,该上下文映射对应于键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
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将此函数链接到我的控制器。您能展示一下实现吗?