2017-05-06 129 views
1

我使用喷雾JSON序列为我下面的案例类Scala的编译错误 - 无法找到的证据类型参数的隐含价值

case class ActivationMessage(override val transid: TransactionId, 
          action: FullyQualifiedEntityName, 
          revision: DocRevision, 
          user: Identity, 
          activationId: ActivationId, 
          activationNamespace: EntityPath, 
          content: Option[JsObject], 
          cause: Option[ActivationId] = None, 
          traceMetadata: Option[SpanMetadata] = None 
          ) extends Message { 

    def meta = JsObject("meta" -> { 
    cause map { 
     c => JsObject(c.toJsObject.fields ++ activationId.toJsObject.fields) 
    } getOrElse { 
     activationId.toJsObject 
    } 
    }) 

    override def serialize = ActivationMessage.serdes.write(this).compactPrint 

    override def toString = { 
    val value = (content getOrElse JsObject()).compactPrint 
    s"$action?message=$value" 
    } 

    def causedBySequence: Boolean = cause.isDefined 
} 

object ActivationMessage extends DefaultJsonProtocol { 
    def parse(msg: String) = Try(serdes.read(msg.parseJson)) 
    private implicit val fqnSerdes = FullyQualifiedEntityName.serdes 
    implicit val serdes = jsonFormat9(ActivationMessage.apply) 
} 

我得到编译错误说 - 无法找到证据参数内含价值类型ActivationMessage.JF[Option[com.github.levkhomich.akka.tracing.SpanMetadata]]

如果我从构造函数中删除最后一个参数并使用jsonFormat8,那么每一个东西编译都很好。我如何在没有任何编译问题的情况下添加这个额外参数

+0

也许它可以帮助你:http://stackoverflow.com/documentation/scala/2348/json/7718/json-with-spray-json#t=201705061639071171484 – pedrorijo91

回答

2

对于SpanMetadata,编译器无法找到隐含的JsonFormat。尝试:

... 
object ActivationMessage extends DefaultJsonProtocol { 
    ... 
    private implicit val spanMetaSerdes = jsonFormat4(SpanMetadata.apply) 
    implicit val serdes = jsonFormat9(ActivationMessage.apply) 
} 
+0

非常感谢。有效。 – Sandeep

相关问题