1

如何从 Lagom 中的 http 请求访问 URL 查询参数?我有一个要求,其中查询参数集是不确定的和无限的。我想以地图的形式访问查询参数。有没有办法做到这一点?

4

3 回答 3

1

从 Lagom 1.3 开始,目前还没有一种方法可以将查询参数作为映射来访问,或者声明一个接受不定参数的服务调用。

在请求可能具有任意长度或复杂性的情况下,最好在实体主体中编码请求数据并使用 Lagom 中的请求消息反序列化器将其映射到不可变数据类型。

于 2017-02-27T23:28:51.053 回答
0

https://github.com/msdhillon8989/lagom-demo-request-header.git

you can use the HeaderServiceCall of lagom.

@Override
public ServiceCall<NotUsed, String> method1() {
    return readHeader(
        new Function<String, ServerServiceCall<NotUsed, String>>() {
            @Override
            public ServerServiceCall<NotUsed, String> apply(String param) throws Exception {
                return request -> {
                        return completedFuture(Utilities.ok(null, parseQueryString(param).toString()));
                };
            }
        });
}

Definition of readHeader function is as below

public <Request, Response> ServerServiceCall<Request, Response> readHeader(Function<String, ServerServiceCall<Request, Response>> serviceCall) {
    return HeaderServiceCall.composeAsync(new java.util.function.Function<RequestHeader, CompletionStage<? extends ServerServiceCall<Request, Response>>>() {
        @Override
        public CompletionStage<? extends ServerServiceCall<Request , Response>> apply(RequestHeader requestHeader) {
            CompletableFuture<String> uri =  CompletableFuture.supplyAsync(()->requestHeader.uri().getRawQuery().toString());
            return uri.thenApply(query->
            {
                try {
                    return serviceCall.apply(query);
                } catch (Exception e) {
                    e.printStackTrace();
                    throw new Forbidden("Bad request "+e.getMessage());
                }
            }
            );
        }
    });
}
于 2017-04-20T10:36:22.997 回答
0

从文档:

查询字符串参数也可以从路径中提取,在 ? 之后使用 & 分隔列表 在路径的尽头。例如,下面的服务调用使用查询字符串参数来实现分页:ServiceCall> getItems(long orderId, int pageNo, int pageSize);

default Descriptor descriptor() {
    return named("orders").withCalls(
            pathCall("/order/:orderId/items?pageNo&pageSize", this::getItems)
    );
}

检查此链接以获取更多详细信息。

于 2017-02-27T13:24:41.707 回答