خطای There is no HTTP Context available from here در Play Framework

0 رأی
میانگین بازدید روزانه 0.1199 بازدید

وقتی در یک متد Action در Play Framework که CompletionStage بر می گرداند می خواهم به request جاری دسترسی داشته باشم با خطای زیر روبرو می شوم:

[CompletionException: java.lang.RuntimeException: There is no HTTP Context available from here.]

در کد زیر:

    public CompletionStage<Result> message() {
        return getFutureMessage(1, TimeUnit.SECONDS)
                .thenApply(result -> ok(request().host() + " - " + result));
    }

    private CompletionStage<String> getFutureMessage(long time, TimeUnit timeUnit) {
        CompletableFuture<String> future = new CompletableFuture<>();
        actorSystem.scheduler().scheduleOnce(
                Duration.create(time, timeUnit),
                () -> future.complete("Hi!"),
                exec
        );
        return future;
    }

فراخوانی request().host را که حذف می کنم کد مشکلی ندارد.

سوال 2 سال قبل در تالار برنامه نویسی توسط Saeed Zarinfam (1,216 امتیاز)
برچسب گذاری مجدد در 2 سال قبل توسط Saeed Zarinfam

1 جواب

0 رأی
 
بهترین جواب

چون داریم از CompletionStage استفاده می کنیم، ممکن است در زمان تغییر thread اطلاعات context از دست برود و در دسترس نباشد بنابراین باید از HttpExecutionContext در زمان باز کردن CompletionStage تکمیل شده استفاده کنیم و آن را به متد thenApplyAsync ارسال کنیم:

    @Inject HttpExecutionContext ec

    public CompletionStage<Result> message() {
        return getFutureMessage(1, TimeUnit.SECONDS)
                .thenApplyAsync(result -> ok(request().host() + " - " + result)
                        , ec.current());
    }

    private CompletionStage<String> getFutureMessage(long time, TimeUnit timeUnit) {
        CompletableFuture<String> future = new CompletableFuture<>();
        actorSystem.scheduler().scheduleOnce(
                Duration.create(time, timeUnit),
                () -> future.complete("Hi!"),
                exec
        );
        return future;
    }
جواب 2 سال قبل توسط Saeed Zarinfam (1,216 امتیاز)

سوال های مشابه

0 رأی
1 جواب میانگین بازدید روزانه 0.15220 بازدید
0 رأی
1 جواب میانگین بازدید روزانه 0.0590 بازدید
+1 رأی
1 جواب میانگین بازدید روزانه 0.16110 بازدید
+1 رأی
1 جواب میانگین بازدید روزانه 0.0871 بازدید
+1 رأی
1 جواب میانگین بازدید روزانه 0.11167 بازدید
0 رأی
1 جواب میانگین بازدید روزانه 0.1153 بازدید
0 رأی
1 جواب میانگین بازدید روزانه 0.06104 بازدید
0 رأی
1 جواب میانگین بازدید روزانه 0.17274 بازدید
سوال 4 سال قبل در تالار برنامه نویسی توسط ftmh (7 امتیاز)
+1 رأی
1 جواب میانگین بازدید روزانه 0.0466 بازدید
کانال تلگرام جواب یاب
...