如何在Akka HTTP中为Scala特征提供unmarshaller?

时间:2018-02-27 19:38:23

标签: scala akka-http spray-json

我正在使用 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方法接受DogCat类型的JSON。 JSON格式化程序也在范围内。但是我收到以下编译错误:

could not find implicit value for parameter um: akka.http.scaladsl.unmarshalling.FromRequestUnmarshaller[models.Animal]

我不明白为什么没有检测到隐式格式化程序。

1 个答案:

答案 0 :(得分:0)

最后,我解决了这个问题。我所要做的就是使用RootJsonFormat代替JsonFormat。所以,格式化器现在看起来像这样:

implicit val AnimalFormat = new RootJsonFormat[Animal] {
  // custom read method
  // custom write method
}