1
我是新来玩框架和Java8。我正在尝试在Play中编写一个简单的Web服务,它符合Asynch模型,并允许Web服务调用快速返回,为异步线程留下沉重的负担。使用CompletionStage返回结果
我有一个非常基本的操作
public CompletionStage<Result> getPeople() {
}
在调用真正的处理必须从数据库中加载的人的数据。 db方法是
List<People> people = dbService.getPeople();
return ok(Json.tojson(people));
dbMethod本身是异步的并返回CompletionStage>。
CompletionStage<List<People>> getPeople() {}
所以我的问题是,我不明白如何最好地编程Web服务,该方法不会阻止。
我可以做这样的事情在我的处理程序
public CompletionStage<Result> getPeople() {
CompletableFuture.completedFuture(
ok(Json.toJson(dbservice.getPeople().get())));
}
这个问题是,在“弄”法controllel块,还在于它抛出异常,我不知道如何处理比其他使用标准的try-catch块(这也使其非异步)。
我也尝试过这样的事情
return CompletableFuture.supplyAsync(() -> {
return dbService.getPeople();
}).thenApply(i -> { ok(Json.toJson(i.get())); });
但是,让编译错误。
我真的很感谢这里的一些帮助;因为我对Java异步编程非常陌生,尽管阅读了很多教程,但我不清楚如何最好地使用这些教程。
谢谢大家。
您在使用播放2.5.X?使用'supplyAsync'时编译错误是什么? – Anton