我想在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>>
我現在有,所以它不會編譯。
我當然可以通過將completionStage放入CompletableFuture並獲取它,但這會使調用同步並迫使我處理InterruptExceptions等等,這對於某些應該是複雜的不重要的。
在Lagom中設置狀態碼的正確方法是什麼?