我正在使用akka超文本传输协议设置一个rest控制器。控制器解析url,提取变量,然后调用一个服务,该服务向参与者发送消息,然后参与者查询存储库并将数据作为消息发送。我最终让参与者接收消息并查询回购(在不得不链接一系列期货之后),但现在我在控制器中遇到了一个我无法理解的错误:
Error:(58, 41) type mismatch;
found : Unit
required: akka.http.scaladsl.server.RequestContext =>
scala.concurrent.Future[akka.http.scaladsl.server.RouteResult]
path("process" / Segment) { process =>
这是否意味着我必须在其他地方包含一个完整的()。
我试图确保参与者发送一个未来作为其消息的内容,并且服务向控制器返回一个未来,因为我认为这是避免空指针的唯一方法。
这些是我的依赖项:
"com.typesafe.akka" %% "akka-http" % "10.1.8",
"com.typesafe.akka" %% "akka-actor" % "2.5.22",
"com.typesafe.akka" %% "akka-stream" % "2.5.22",
"com.typesafe.akka" %% "akka-http-spray-json" % "10.1.8"
这是Rest控制器:
val processRoute =
path("process" / Segment) { process =>
withoutRequestTimeout {
parameters("userName", "limit") { (twitterUserName, limit) =>
get {
val processRequest: ProcessRequest = new ProcessRequest(twitterUserName, process, limit.toInt)
import JsonSupport._
process match {
case "shout" =>
val serviceResult // add more cases in future or call method dynamically
= processService.shout(processRequest)
var listOfTweetTexts: List[String] = List[String]()
serviceResult onComplete {
case Success(result) =>
for (tweet <- result.tweets) listOfTweetTexts ::= tweet;
complete(listOfTweetTexts)
case Failure(t) =>
actorSystem.log.error("An error has occurred: " + t.getMessage)
complete(HttpEntity(ContentTypes.`text/html(UTF-8)`, "Say hello to failure"))
}
// complete(HttpEntity(ContentTypes.`text/html(UTF-8)`, "Say hello to" + limit))
case _ => complete(HttpEntity(ContentTypes.`text/html(UTF-8)`, "Say hello to" + limit))
}
complete(HttpEntity(ContentTypes.`text/html(UTF-8)`, "Say hello to" + limit))
}
}
}
}
}
您正在对返回< code>Unit的< code>Future调用< code>onComplete。你要做的是在< code>Future上使用Akka onComplete
。
所以它应该是
onComplete(serviceResult) {
而不是
serviceResult onComplete {
Tango支持4种形式的路由匹配规则 静态路由 tg.Get("/", new(Action)) tg.Get("/static", new(Action))匹配 URL:/ 到 Action结构体的Get函数 匹配 URL:/static 到 Action结构体的Get函数 命名路由 tg.Get("/:name", new(Action)) tg.Get("/(:name)", new(Act
我有以下具有以下方法的类。 GsonHelper为我提供了一些 在Java 7之前,我一直使用这种方法,例如: 这工作得很好。因为这个方法会返回一个布尔值,我可以在“if”中使用它。但是当我换到Java 8时,这就不可能了。编译器抱怨: 类型不匹配:无法从对象转换为布尔值 我知道java.lang.Boolean可以为空。我可以通过以下方式解决这个问题: 但我很好奇,为什么这在Java 7中有效,
错误:java.io.ioException:错误值类:类org.apache.hadoop.io.text不是类org.apache.hadoop.mapred.ifile$writer.append(ifile.java:194)在org.apache.hadoop.mapred.task$combineoutputCollector.collect(task.java:1350)在org.a
问题内容: 我试图在Swift中使用JSONDecoder将JSON转换为Structs,所以我编写了所有Structs,将它们修改了几个小时,但它仍然给我这个错误。我不知道是否有办法查看给出此信息的行。我将在下面发布我的struct,并在其后发布Json File链接。 完整的错误描述是: typeMismatch(Swift.Dictionary ,Swift.DecodingError.Co
英文原文: http://emberjs.com/guides/routing/specifying-a-routes-model/ 指定路由的模型 应用中的模板背后是由模型来支撑的。那么模板是如何知道需要显示哪些模型的呢? 例如,如果有一个photos模板,那么它是如何知道应该渲染哪一个模型的呢? 这正是Ember.Route的工作之一。通过定义一个与模板同名的,并实现其model方法的路由,是
注意:本部分是为v1 API编写的,但这些概念也适用于v2 API。它将在未来版本的v2 API中重新描述。 Envoy的路由匹配过程如下: HTTP请求的头域字段 host 或 :authority 与虚拟主机匹配。 按顺序检查虚拟主机中的每个路由表。如果匹配,则使用该路由并且不再匹配路由。 独立地,依次检查虚拟主机中的每个虚拟集群。如果匹配,则使用虚拟群集,不再进一步匹配集群。 返回 上一级