Lagomで典型的な残りのPOST呼び出しを実装したいと思います。 POSTはオブジェクトを作成し、ステータスコード201を返します。Lagomサービスコールでステータスコードを返す方法
ただし、デフォルトの戻りコードは200です。ここに示すようにステータスコードを設定することができます(https://www.lagomframework.com/documentation/1.3.x/java/ServiceImplementation.html#Handling-headers)。
しかし、私はもっと複雑な場合にそれを行う方法を理解できません。私の作成は非同期で、Stringの代わりにオブジェクトを返します。
@Override
public HeaderServiceCall<OrderRequest.CreateOrderRequest, Order> createOrder() {
UUID orderId = UUID.randomUUID();
ResponseHeader responseHeader = ResponseHeader.OK.withStatus(201);
return (requestHeader, request) -> {
CompletionStage<Order> stage = registry.refFor(OrderEntity.class, orderId.toString())
.ask(buildCreateOrder(orderId, request))
.thenApply(reply -> toApi(reply));
return CompletableFuture.completedFuture(Pair.create(responseHeader, stage.toCompletableFuture()));
};
}
しかし、戻り値は、私が今持っているPair<ResponseHeader, Order>
、ないPair<ResponseHeader, CompletionStage<Order>>
する必要があり、それがコンパイルされません:
これは私が持っているコードです。
CompletableFutureにcompletionStageを入れてそれを取得することで、Orderを自分自身で抽出することはできますが、これは呼び出しを同期させ、InterruptExceptionsなどを処理するよう強制します。簡単。
Lagomでステータスコードを設定する正しい方法は何ですか?