在controller里调用 ctx.get("ServerHttpRequest.class") 的时候报错 Context is empty,请问问题出在哪里呢?
@Configuration
@ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.REACTIVE)
public class ReactiveRequestContextFilter implements WebFilter {
@Override
public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
ServerHttpRequest request = exchange.getRequest();
return chain.filter(exchange)
.contextWrite(ctx -> ctx.put("ServerHttpRequest.class", request));
}
}
public class ReactiveRequestContextHolder {
public static Mono<ServerHttpRequest> getRequest() {
return Mono.deferContextual(ctx ->
{
// -------------------------------------------
// reactor.core.Exceptions$ErrorCallbackNotImplemented: java.util.NoSuchElementException: Context is empty
// -------------------------------------------
return Mono.just(ctx.get("ServerHttpRequest.class"));
});
}
}
@GetMapping(value = "/test")
public Mono<String> get() {
Mono<ServerHttpRequest> req = ReactiveRequestContextHolder.getRequest();
req.flatMap(request -> {
HttpHeaders headers = request.getHeaders();
return Mono.just(headers.getFirst("user"));
}).subscribe(s -> System.out.println(s));
return Mono.just("ok");
}