你能帮我写通用隐式转换吗?
我正在使用 Scala 2.10.2 和 Spray 1.2。
这是我所拥有的
// for "parameters"
implicit def ObjectIdUnmarshallerString = new Deserializer[String, ObjectId] {
def apply(value: String) =
try Right(new ObjectId(value))
catch {
case ex: Throwable => Left(MalformedContent(s"Cannot parse: $value", ex))
}
}
// for "formParameters"
implicit def ObjectIdUnmarshallerHttpEntity = new Deserializer[HttpEntity, ObjectId] {
def apply(value: HttpEntity) = ObjectIdUnmarshallerString(value.asString)
}
如您所见,HttpEntity->ObjectId 的反序列化器仅使用 String->ObjectId 反序列化器。我必须为我在 HTTP 路由特征中使用的每个类复制粘贴这样的代码。
所以我想如果我可以编写通用的 HttpEntity->T ,它将Deserializer[String, T]
在范围内使用。
我试过这个:
implicit def GenericUnmarshallerHttpEntity[T] = new Deserializer[HttpEntity, T] {
def convertAsString(value: HttpEntity)(implicit conv: Deserializer[String, T]) = conv(value.asString)
def apply(value: HttpEntity) = convertAsString(value)
}
可悲的是它不起作用。并说:
could not find implicit value for parameter conv: spray.httpx.unmarshalling.Deserializer[String,T]
def apply(value: HttpEntity) = convertAsString(value)
^
not enough arguments for method convertAsString: (implicit conv: spray.httpx.unmarshalling.Deserializer[String,T])spray.httpx.unmarshalling.Deserialized[T].
Unspecified value parameter conv.
def apply(value: HttpEntity) = convertAsString(value)
^
你能建议怎么做吗?