你 必须 用打交道时提供HTTP执行上下文
CompletableFuture/
CompletionStage。在Scala中,上下文信息是通过隐式传递的,隐式在Java中不可用-这就是Play使用的原因
ThreadLocal。
但是,切换线程时您可能会丢失此信息,这就是您遇到问题的原因。您 可能 认为您没有访问HTTP上下文,但实际上您在访问-您正在使用
request()。
因此,您必须更改代码以
supplyAsync与执行程序一起使用:
https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html#supplyAsync-
java.util.function.Supplier-
java.util.concurrent.Executor-
由此:
CompletableFuture.supplyAsync(() -> abstractSource.getChunked(index.render(CSRF.getToken(request()).map(t -> t.value()).orElse("no token")).body() ) );对此:
CompletableFuture.supplyAsync(() -> abstractSource.getChunked(index.render(CSRF.getToken(request()).map(t -> t.value()).orElse("no token")).body() ) , ec.current());ec您的上下文在哪里:
@Inject HttpExecutionContext ec;



