我正在使用 Akka HTTP 和 spray-json 。
我定义了以下模型层次结构:
trait Animal {
def weight: Int
def name: String
}
case class Dog(
weight: Int,
name: String
//other specific attributes
) extends Animal
case class Cat(
weight: Int,
name: String
//other specific attributes
) extends Animal
我还为特征JsonFormat
定义了正确的自定义Animal
:
implicit val AnimalFormat = new JsonFormat[Animal] {
// custom read method
// custom write method
}
现在我想要一个通用的POST方法来创建Animal
个实例:
post {
entity(as[Animal]) { animal =>
complete {
//save Animal
}
}
}
我希望此POST方法接受Dog
和Cat
类型的JSON。 JSON格式化程序也在范围内。但是我收到以下编译错误:
could not find implicit value for parameter um: akka.http.scaladsl.unmarshalling.FromRequestUnmarshaller[models.Animal]
我不明白为什么没有检测到隐式格式化程序。
答案 0 :(得分:0)
最后,我解决了这个问题。我所要做的就是使用RootJsonFormat
代替JsonFormat
。所以,格式化器现在看起来像这样:
implicit val AnimalFormat = new RootJsonFormat[Animal] {
// custom read method
// custom write method
}