[英]How to return a status code in a Lagom Service call
我想在Lagom中實現一個典型的休息POST調用。 POST創建一個對象,並返回它,狀態代碼為201。
但是,默認返回碼是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並獲取它來自己提取Order,但這會使調用同步並迫使我處理InterruptExceptions等,這對於應該是微不足道的事情來說似乎有點復雜。
在Lagom中設置狀態代碼的正確方法是什么?
你幾乎已經解決了。 而不是創建一個新的completedFuture
你可以撰寫stage
與建立最終的拉姆達Pair
這樣的:
return stage.thenApply( order -> Pair.create(responseHeader, order));
將所有部分組合在一起:
registry.refFor(OrderEntity.class, orderId.toString())
.ask(buildCreateOrder(orderId, request))
.thenApply( reply -> toApi(reply));
.thenApply( order -> Pair.create(responseHeader, order));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.