2017-11-10 16 views
1

에서 결과를 반환하는 일부 데이터베이스 데이터를 가져옵니다은 어떻게 플레이 프레임 워크 간단한 REST-API를 개발할하려고하고 난 다음에 붙어 비동기 플레이 액션

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<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()); 
} 

지금 내가 클라이언트에 데이터를 반환하기 전에 몇 가지 값을 확인 할 데이터를 반환3210

public CompletionStage<Result> list(int page, String sortBy, String order, String filter) { 

    If(x=„somedata“){ 
      // 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()); 
    } Else { 
     Return ok(„value is Not some Data ...“) 
    } 
} 

문제는 간단한 결과를 반환 할 수 없다는 것입니다.이 작업을 수행하는 가장 좋은 방법은 무엇입니까? 비동기 메서드에서도 결과를 왜곡 할 수 있습니까? 이것은 좋은 습관입니까? https://github.com/playframework/play-java-ebean-example

해결책 : 제가 다시 CompletableFuture 및 CompletionStage위한 Javadoc 읽기 안드리 쿠바에서 awnser 함께

예는 본 GitHub의 사이트를 형성한다. 이 작업을 수행하는 올바른 방법입니다. (실제로 중요한) 비동기로 Play 프레임 워크를 사용하려는 모든 사용자는 https://github.com/playframework/play-java-ebean-example의 예제를보고 CompletionStage (https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletionStage.html) 및 CompletableFuture (https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html)의 javadoc을 읽으십시오. 이를 염두에두고 비동기 코드를 작성하는 것은 매우 쉽고 즐겁습니다!

답변

1

당신은

} Else { 
    return CompletableFuture.completedFuture(ok("value is Not some Data ...")) 
} 
처럼 CompletionStage에 결과를 포장 할 필요가