我正在尝试使用Scala中的spray-json来识别在转换为Json和回传时Ec2Provider和OpenstackProvider之间的选择。
我想能够在"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
)
}
非常遗憾,它失败了,因为找不到Provider
抽象类的格式化程序。
test.scala:19: could not find implicit value for evidence parameter of type Infrastructures.JF[Provider]
有人对此有解决方案吗?