Ich versuche, Spray-Json in Scala zu verwenden, um die Wahl zwischen Ec2Provider und OpenstackProvider bei der Konvertierung in Json und zurück zu erkennen. Ich möchte in "Provider" wählen können, und wenn diese Auswahl nicht zu den verfügbaren passt, sollte es nicht validieren.Konvertieren polymorphe Fall Klassen in JSON und zurück
import spray.json._
import DefaultJsonProtocol._
case class Credentials(username: String, password: String)
abstract class Provider
case class Ec2Provider(endpoint: String,credentials: Credentials) extends Provider
case class OpenstackProvider(credentials: Credentials) extends Provider
case class Infrastructure(name: String, provider: Provider, availableInstanceTypes: List[String])
case class InfrastructuresList(infrastructures: List[Infrastructure])
object Infrastructures extends App with DefaultJsonProtocol {
implicit val credFormat = jsonFormat2(Credentials)
implicit val ec2Provider = jsonFormat2(Ec2Provider)
implicit val novaProvider = jsonFormat1(OpenstackProvider)
implicit val infraFormat = jsonFormat3(Infrastructure)
implicit val infrasFormat = jsonFormat1(InfrastructuresList)
println(
InfrastructuresList(
List(
Infrastructure("test", Ec2Provider("nova", Credentials("user","pass")), List("1", "2"))
)
).toJson
)
}
Leider scheitert es, weil es nicht eine Formatierer für Provider
abstrakte Klasse finden:
bei dieser Mein Versuch kann in dem folgenden Code zu sehen.
test.scala:19: could not find implicit value for evidence parameter of type Infrastructures.JF[Provider]
Hat jemand eine Lösung dafür?
Als Sie sehr! Genau das habe ich gebraucht! – wernerb