Java 如何从异步播放操作返回结果
我尝试使用play框架开发一个简单的REST-API,我坚持以下几点: 我有两种方法:获取一些数据库数据Java 如何从异步播放操作返回结果,java,asynchronous,playframework-2.0,Java,Asynchronous,Playframework 2.0,我尝试使用play框架开发一个简单的REST-API,我坚持以下几点: 我有两种方法:获取一些数据库数据 public CompletionStage<PagedList<Computer>> page(int page, int pageSize, String sortBy, String order, String filter) { return supplyAsync(() -> { return ebeanServer.find(
public CompletionStage<PagedList<Computer>> page(int page, int pageSize, String sortBy, String order, String filter) {
return supplyAsync(() -> {
return ebeanServer.find(Computer.class).where()
.ilike("name", "%" + filter + "%")
.orderBy(sortBy + " " + order)
.fetch("company")
.setFirstRow(page * pageSize)
.setMaxRows(pageSize)
.findPagedList();
} , executionContext);
}
public CompletionStage页面(int-page、int-pageSize、字符串排序、字符串顺序、字符串过滤器){
返回SupplySync(()->{
返回ebeanServer.find(Computer.class).where()
.ilike(“名称”,“百分比”+过滤器+“%”)
.orderBy(排序方式+“”+订单)
.fetch(“公司”)
.setFirstRow(页面*页面大小)
.setMaxRows(页面大小)
.findPagedList();
},执行上下文);
}
第二个是:返回数据
public CompletionStage<Result> list(int page, String sortBy, String order, String filter) {
// Run a db operation in another thread (using DatabaseExecutionContext)
return computerRepository.page(page, 10, sortBy, order, filter).thenApplyAsync(list -> {
// This is the HTTP rendering thread context
return ok(views.html.list.render(list, sortBy, order, filter));
}, httpExecutionContext.current());
}
public CompletionStage列表(整型页面、字符串排序、字符串顺序、字符串过滤器){
//在另一个线程中运行db操作(使用DatabaseExecutionContext)
返回computerRepository.page(第10页,排序、顺序、筛选)。然后应用同步(列表->{
//这是HTTP呈现线程上下文
返回ok(views.html.list.render(list、sortBy、order、filter));
},httpExecutionContext.current());
}
现在,我想在将数据返回到客户机之前检查一些值:(例如,一些头值)
public CompletionStage列表(整型页面、字符串排序、字符串顺序、字符串过滤器){
如果(x=“某些数据”){
//在另一个线程中运行db操作(使用DatabaseExecutionContext)
返回computerRepository.page(第10页,排序、顺序、筛选)。然后应用同步(列表->{
//这是HTTP呈现线程上下文
返回ok(views.html.list.render(list、sortBy、order、filter));
},httpExecutionContext.current());
}否则{
返回正常(“值不是某些数据…”)
}
}
问题是,我不能返回一个简单的结果…最好的方法是什么?也许在异步方法中扭曲结果?这是一个好的做法吗
此github站点的示例如下:
解决方案:
对于来自Andrey Kuba的awnser,我再次阅读了CompletableFuture和CompletionStage的javadoc。这似乎是正确的方法!对于所有希望在异步(这非常重要)中使用Play framework的人,请查看示例并阅读CompletionStage()和CompletableFuture()的javadoc。记住这一点,编写异步代码是非常简单和愉快的!您需要像
} Else {
return CompletableFuture.completedFuture(ok("value is Not some Data ..."))
}
} Else {
return CompletableFuture.completedFuture(ok("value is Not some Data ..."))
}