2015-07-21 2 views
1

Я знаю, что этот вопрос задан тысячу раз, но я не могу понять, почему этот код не может работать должным образом.Json format with Play 2.4/Scala

case class Partner 
(_id: Option[BSONObjectID], name: String, beacon: Option[Beacon]) 

class PartnerFormatter @Inject() (val beaconDao: BeaconDao){ 
    implicit val partnerReads: Reads[Partner] = (
     (__ \ "_id").readNullable[String]and 
     (__ \ "name").read[String] and 
     (__ \ "beacon").read[String] 
    )((_id, name, beaconID) => Partner(_id.map(BSONObjectID(_)), name, Await.result(beaconDao.findById(beaconID), 1 second)))) 

    implicit val partnerWrites: Writes[Partner] = (
     (JsPath \ "_id").writeNullable[String].contramap((id: Option[BSONObjectID]) => Some(id.get.stringify)) and 
     (JsPath \ "name").write[String] and 
     (JsPath \ "beacon").writeNullable[String].contramap((beacon: Option[Beacon]) => Some(beacon.get._id.get.stringify)) 
    )(unlift(Partner.unapply)) 
} 

И я столкнулся

No Json deserializer found for type models.Partner. Try to implement an implicit Reads or Format for this type 

Или

No Json deserializer found for type models.Partner. Try to implement an implicit Writes or Format for this type 

Не должна ли она работать?

+0

убедитесь, что эти implicits фактически присутствуют, когда преобразование происходит –

+0

Импортируя их? – buzz2buzz

+0

Да, я не уверен в деталях игры, но с помощью Spray обычно мне не хватает импорта. Я просто исправил ту же самую проблему на службе AkkaHttp, и ей не хватало этого импорта в верхней части файла: import akka.http.scaladsl.marshallers.sprayjson.SprayJsonSupport._ Надеюсь, это поможет вам на правильном пути –

ответ