私は、JsonとBackに変換するときにEc2ProviderとOpenstackProviderの間の選択を認識するためにscalaでspray-jsonを使用しようとしています。 私は「プロバイダ」で選択肢を提供できるようにしたいと考えています。そして、それらの選択肢が利用可能なものに適合しない場合、それは検証されるべきではありません。この時多形ケースクラスをjsonに変換して戻す
私の試みは、次のコードで見ることができます:それはProvider
抽象クラスのためのフォーマッタを見つけることができないため
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
)
}
残念ながら、それは失敗します。
test.scala:19: could not find implicit value for evidence parameter of type Infrastructures.JF[Provider]
誰でもこれを解決する方法はありますか?
非常によかった!これはまさに私が必要としていたものです! – wernerb