Json으로 변환 할 때 Ec2Provider와 OpenstackProvider 사이의 선택을 인식하기 위해 scala에서 spray-json을 사용하려고합니다. "제공자"에서 선택권을 부여 할 수 있기를 원합니다. 그리고 그러한 선택 사항이 이용 가능한 것과 맞지 않을 경우 유효성을 검증하면 안됩니다. 이것polymorphic case 클래스를 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