java - Lagom -如何将带有查询参数(数组类型)的端点映射到restcall

标签 java query-string lagom

Sample endpoint : http://localhost:9003/mas/v1/events?ids=["e1","e2","e3"]

我正在尝试将查询参数映射到 string[], 下面是完成的服务调用和休息调用映射

 //Mapping the query parameter to array of string
 ServiceCall<NotUsed, String> getEvents(String[] ids);

 restCall(Method.GET, "/mas/v1/events?ids", this::getEvents);

当我尝试将查询参数映射到 te String[] 时,我得到以下异常(exception)

Caused by: java.lang.IllegalStateException: Unable to resolve method for service call with ID RestCallId{method=GET, pathPattern='/mas/v1/events?ids'}. Ensure that the you have passed a method reference (ie, this::someMethod). Passing anything else, for example lambdas, anonymous classes or actual implementation classes, is forbidden in declaring a service descriptor.
    at com.lightbend.lagom.internal.javadsl.api.ServiceReader$$anonfun$4.apply(ServiceReader.scala:103)
    at com.lightbend.lagom.internal.javadsl.api.ServiceReader$$anonfun$4.apply(ServiceReader.scala:88)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234)
    at scala.collection.Iterator$class.foreach(Iterator.scala:893)
    at scala.collection.AbstractIterator.foreach(Iterator.scala:1336)
    at scala.collection.IterableLike$class.foreach(IterableLike.scala:72)
    at scala.collection.AbstractIterable.foreach(Iterable.scala:54)
    at scala.collection.TraversableLike$class.map(TraversableLike.scala:234)
    at scala.collection.AbstractTraversable.map(Traversable.scala:104)
    at com.lightbend.lagom.internal.javadsl.api.ServiceReader$.resolveServiceDescriptor(ServiceReader.scala:88)
    at com.lightbend.lagom.internal.javadsl.server.JavadslServerBuilder.resolveDescriptor(JavadslServerBuilder.scala:66)
    at com.lightbend.lagom.internal.javadsl.server.JavadslServerBuilder$$anonfun$1.apply(JavadslServerBuilder.scala:55)
    at com.lightbend.lagom.internal.javadsl.server.JavadslServerBuilder$$anonfun$1.apply(JavadslServerBuilder.scala:49)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234)
    at scala.collection.mutable.ResizableArray$class.foreach(ResizableArray.scala:59)
    at scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:48)
    at scala.collection.TraversableLike$class.map(TraversableLike.scala:234)
    at scala.collection.AbstractTraversable.map(Traversable.scala:104)
    at com.lightbend.lagom.internal.javadsl.server.JavadslServerBuilder.resolveServices(JavadslServerBuilder.scala:49)
    at 
Caused by: java.lang.ClassNotFoundException: [Ljava/lang/String
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:348)
    at com.lightbend.lagom.internal.javadsl.api.MethodRefResolver$.loadClass(MethodRefResolver.scala:58)
    at com.lightbend.lagom.internal.javadsl.api.MethodRefResolver$.parseArgumentClasses$1(MethodRefResolver.scala:73)
    at com.lightbend.lagom.internal.javadsl.api.MethodRefResolver$.getArgumentClasses(MethodRefResolver.scala:95)
    at com.lightbend.lagom.internal.javadsl.api.MethodRefResolver$.resolveMethodRef(MethodRefResolver.scala:49)
    at com.lightbend.lagom.internal.javadsl.api.ServiceReader$$anonfun$4.apply(ServiceReader.scala:100)
    ... 66 more

最佳答案

您只需将 ids 参数设置为 String

因此,您的服务调用和休息调用映射将如下所示。

 ServiceCall<NotUsed, String> getEvents(String ids);

 restCall(Method.GET, "/mas/v1/events?ids", this::getEvents);

因此您的示例端点将如下所示。

Sample endpoint : http://localhost:9003/mas/v1/events?ids=e1,e2,e3

然后在服务调用实现方法中使用String.split(regex)方法将String Ids转换为数组。

@Override
public ServiceCall<NotUsed, String> getEvents(String ids) {
    String[] idsArray = ids.split(",");
    return request -> CompletableFuture.completedFuture("");
}

关于java - Lagom -如何将带有查询参数(数组类型)的端点映射到restcall,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51742774/

相关文章:

java - 在 Facebook 应用程序和浏览器之间进行选择?

angularjs - 使用 AngularJS 和 NodeJS、MongoDB 进行动态 URL 查询

scala - Lagom 的多部分表单错误

java - 在 Lagom 中使用外部 REST 服务最简单的方法是什么?

java - Spring-data 无法更新 id 为 0 的对象

java - 将扫描仪设置为全局变量

java - 向 servlet 发送第二个查询参数

java - Lightbend Lagom - 如何重构 Java EE 整体架构

java - Tomcat7 在 Ubuntu 14.04 x64 [Digitalocean] 上启动太晚了

jquery - json 查询字符串中的 URL 格式