Scala 为什么完成';在使用JavaUUID的地方对请求进行加密会导致编译错误吗?
我正在和Akka和Spray一起开发一个项目。除了使用以下路径处理的Scala 为什么完成';在使用JavaUUID的地方对请求进行加密会导致编译错误吗?,scala,akka,spray,Scala,Akka,Spray,我正在和Akka和Spray一起开发一个项目。除了使用以下路径处理的GETs外,它工作正常: class UserRoot extends Directives with DefaultJsonFormats with PerRequestCreator { val route = path("users" / JavaUUID / "activities") { userId => get { complete { create
GET
s外,它工作正常:
class UserRoot extends Directives with DefaultJsonFormats with PerRequestCreator {
val route =
path("users" / JavaUUID / "activities") { userId =>
get {
complete {
createActorPerRequest(new StringUUID(userId), Props[LogicGetActivitiesFromUser])
}
}
}
def createActorPerRequest(entity: Entity, target: Props): Route =
context => perRequest(context, target, Work(entity))
}
StringUUID
类:
case class StringUUID(id: String) extends Entity // I also tried UUID instead of String
上述代码包含以下错误:
error: type mismatch;
found : java.util.UUID
required: String
createActorPerRequest(new StringUUID(userId), Props[LogicGetActivitiesFromUser])
但是如果我添加import reflect.ClassTag
(我在互联网上发现的),它会给我另一个错误:
error: could not find implicit value for evidence parameter of type spray.httpx.marshalling.Marshaller[spray.routing.RequestContext => Unit]
createActorPerRequest(new StringUUID(userId.toString), Props[LogicGetActivitiesFromUser])
有什么想法吗?看看这个。它没有完整的
以下路线
应修复错误:
val route =
path("pets") {
get {
petsWithOwner {
GetPetsWithOwners(List("Lassie"))
}
}
}
问题是类型不匹配,所以Scala编译器(不是Spray或Akka或其他任何东西)将其报告为编译错误 在
route
代码的第一个版本中,请注意userId
的类型——正如Scala编译器所说,它是java.util.UUID
。对于id
输入参数,在StringUUID
中,如果需要String
,则不能使用java.util.UUID
类型的val
在代码的第二个版本中,您使用了userId.toString
类型String
与id
输入参数的预期类型匹配。这导致了另一个问题,即没有按照complete
的要求对createActorPerRequest
的响应进行隐式整理
您应该让spawn参与者完成
响应,或者等待参与者的响应(使用ask
模式),并将其作为完成
的响应传递。这也需要一个封送拆收器(就像参与者的receive
中complete
中的代码一样)