2017-07-03 4 views
0
case class Box(id: String, container: Container) 
    case class Container(id: String, boxes: List[Box]) 

    object CustomProtocol extends DefaultJsonProtocol { 
    implicit object BoxFormat extends RootJsonFormat[Box] { 
     override def read(json: JsValue): Box = json.asJsObject.getFields("id", "container") match { 
     case Seq(JsString(id), container) => Box(id, container.convertTo[Container]) 
     } 
     override def write(obj: Box): JsValue = ??? 
    } 
    implicit object ContainerFormar extends RootJsonFormat[Container] { 
     override def read(json: JsValue): Container = json.asJsObject.getFields("id", "boxes") match { 
     case Seq(JsString(id), boxes) => Container(id, boxes.convertTo[List[Box]]) 
     } 
     override def write(obj: Container): JsValue = ??? 
    } 
    } 

Lors de la compilation, j'obtiens ce message d'erreur. Je pense que c'est parce que la boîte et le conteneur ont l'un l'autre comme champs. Comment puis-je résoudre ce problème?problème de désérialisation spray-json

Répondre

0

résolus

case class Box(id: String, container: Container) 
    case class Container(id: String, boxes: List[Box]) 

    object CustomProtocol extends DefaultJsonProtocol { 
    implicit object BoxFormat extends JsonFormat[Box] { 
     override def read(json: JsValue): Box = json.asJsObject.getFields("id", "container") match { 
     case Seq(JsString(id), container) => Box(id, container.convertTo[Container](ContainerFormat)) 
     } 
     override def write(obj: Box): JsValue = ??? 
    } 

    implicit object ContainerFormat extends JsonFormat[Container] { 
     override def read(json: JsValue): Container = json.asJsObject.getFields("id", "boxes") match { 
     case Seq(JsString(id), boxes) => Container(id, boxes.convertTo[List[Box]](listFormat(BoxFormat))) 
     } 
     override def write(obj: Container): JsValue = ??? 
    } 
    }