所以,我有这个类:
case class Something[T](data: Option[T] = None)
我按照指南中的说明在https://github.com/spray/spray-json和https://doc.akka.io/docs/akka-http/current/common/json-support.html中注册它。就像这样:
import akka.http.scaladsl.marshallers.sprayjson.SprayJsonSupport
import spray.json.DefaultJsonProtocol
trait InternalJsonFormat extends SprayJsonSupport with DefaultJsonProtocol {
import spray.json._
implicit def somethingFormat[A :JsonFormat] = jsonFormat1(Something.apply[A])
}
最后我使用了来自akka http指令的complete
。代码如下:
import akka.http.scaladsl.server.Directives._
object ResponseIt extends InternalJsonFormat {
def apply[T](rawData: T) = {
val theResponse = Something(data = Some(rawData))
complete(theResponse)
}
}
然后我在complete(theResponse)
中遇到了一个错误。它说:
Type mismatch, expected: ToResponseMarshallable, actual: Something[T]
我曾尝试修改最后的代码以进行调试,像这样:
object ResponseIt extends InternalJsonFormat {
import spray.json._
def apply[T](rawData: T) = {
val theResponse = Something(data = Some(rawData))
val trying = theResponse.toJson
complete(theResponse)
}
}
在 val trying = theResponse.toJson
中出现了新的错误,就像这样:
No implicits found for parameter writer: JsonWriter[Something[T]]
我真的很困惑我的代码哪里出了问题?有没有正确使用akka http中的spray json支持的方法?
提前感谢。
无法找到Something[_1]的JsonWriter或JsonFormat类型类
。 - Enki Probo_1
是什么类型?你有它的 JsonFormat 吗?此外,你可以提供一个最小可复现的代码示例,以便我或其他人可以查看。 - Yevhenii PopadiukSomething
中有 2 个字段,就像这样case class Something[T](data: Option[T] = None, meta: Option[String] = None)
.. 在最后的代码中,我有这样的语句val theResponse = if (blabla) Something(data = Some(data)) else Something(meta = Some(meta))
,这就是问题所在。我应该进行显式的赋值.. 嘿嘿,非常感谢 :) - Enki Probo