2
@With
주석 스타일과 함께 사용할 수있는 동작을 만들고 싶습니다. 이 작업은 RPC 호출로 진행해야하므로 문서를 올바르게 이해하면 비동기 방식으로 처리해야합니다.Java의 Play Framework 2.5에서 동작 구성 및 비동기
public class GetUserIdAction extends play.mvc.Action.Simple {
@Override
public CompletionStage<Result> call(Http.Context context) {
String token = "";
if (StringUtils.isEmpty(token)) {
return delegate.call(context);
}
CompletionStage<Http.Context> promiseOfUpdatedContext = CompletableFuture.supplyAsync(() -> setUserIdForToken(context, token));
return promiseOfUpdatedContext.thenApply(ctx -> delegate.call(ctx));
}
private Http.Context setUserIdForToken(Http.Context context, String token) {
context.args.put("user_id", authenticationManager.getUserIdForToken(token));
// The AuthenticationManager is issuing an RPC call and thus may take some time to complete.
return context;
}
}
이
token
은 항상 비어 있고
authenticationManager
이 설정되지 않은 사실, 이것은 그냥 빨리 의미 예이다 따로 설정
, 내 IDE가에 불평 :
이
내가 지금까지하려고 노력 무엇인가thenApply
부분. 내가 이해하는 것을 위해, 그것은
CompletionStage<Result>
를 기대하고 있고, 그 이상의 무엇인가 얻는다
CompletionStage<CompletionStage<Result>>
.
어떻게 처리 할 수 있습니까? 왜냐하면 여기서 내가 원하는 것은 컨텍스트에 몇 가지 정보를 넣은 다음 delegate.call
체인을 계속 사용하는 것입니다.
어쩌면 내가 어리석은 짓을하고 있으며 구성한 작업이 이미 비동기 적이기도합니다.
당신을 감사합니다 HttpContext를에 추가 대단히 지금 작동한다! –