簡體   English   中英

如何在Lagom服務調用中返回狀態代碼

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM