Scala 为什么完成';在使用JavaUUID的地方对请求进行加密会导致编译错误吗?

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

我正在和Akka和Spray一起开发一个项目。除了使用以下路径处理的
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
中的代码一样)