如何在 Lagom 的 rest api 路径中将请求参数设为可选?

How to make request param as optional in a rest api path in Lagom?

我想在其余 Call 方法的路径中将请求参数设置为可选。假设服务描述符是

public interface UserService extends Service {

    ServiceCall<NotUsed, PSequence<User>> getUsers(String filter);

    @Override
    default Descriptor descriptor() {
        return Service.named("user-service").withCalls(
                Service.restCall(Method.GET, "/api/users", 
                                                 this::getUsers)
        ).withAutoAcl(true);
    }
}

我想对两个不同的 url 使用相同的处理程序,一个带有请求参数,一个没有请求参数。

例如:

  1. /api/users(为此,处理程序中的字符串过滤器应该 为 null 或空)
  2. /api/users?filter=abc(为此,过滤器的值应该是 abc).

这可能吗?

是,使用 java.util.Optional<String> 类型,此处记录查询字符串的语法:

https://www.lagomframework.com/documentation/1.3.x/java/ServiceDescriptors.html#Path-based-identifiers

所以:

public interface UserService extends Service {

  ServiceCall<NotUsed, PSequence<User>> getUsers(Optional<String> filter);

  @Override
  default Descriptor descriptor() {
    return Service.named("user-service").withCalls(
      Service.restCall(Method.GET, "/api/users?filter", this::getUsers)
    ).withAutoAcl(true);
  }
}