我想在scala中使用spray-json来识别在转换为Json和返回时Ec2Provider和OpenstackProvider之间的选择。 我希望能够在“提供者”中做出选择,如果这些选择不适合可用的选择,则不应该进行验证。转换多态case类到json并返回
我在这次尝试中可以看到下面的代码:
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]
任何人有这方面的任何解决方案?
比你非常!这正是我需要的! – wernerb 2013-05-13 15:48:28