我想在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中设置状态码的正确方法是什么?