2013-11-21 22 views
5

フォーマット、読み込み、書き込みのメソッドが機能せず、問題を特定できません。私の意見では、 Json.format、Json.reads、Json.writesを期待どおりに実装しました。私は私のコードをコンパイルする場合、私は次のエラーを取得する:Play Framework 2.2:Jsonデシリアライザが見つかりません

No Json deserializer found for type Option[(String, String, String, String, String)] 

マイモデル:

object User { 

    val simple = { 
     get[Option[Long]]("id") ~ 
     get[String]("username") ~ 
     get[String]("email") ~ 
     get[String]("firstname") ~ 
     get[String]("lastname") map { 
     case id ~ username ~ email ~ firstname ~ lastname => User(
      id, username, email, firstname, lastname) 
     } 
    } 

    implicit val userFormatter = Json.format[User] 
    implicit val userReads = Json.reads[User] 
    implicit val userWrites = Json.writes[User] 

    def findById(id: Long): Option[User] = { 
     DB.withConnection { 
     implicit connection => 
      SQL("select * from \"user\" where id = {id}").on('id -> id).as(User.simple.singleOpt) 
     } 
    } 
} 

マイ処置:

def get(id: Long) = Action { 
    Ok(Json.toJson(User.findById(id).map { 
     user => 
     (user.id.toString, user.username, user.email, user.firstname, user.lastname) 
    }).getOrElse[String]("")) 
    } 

答えて

1

Json.toJson[T](obj: T)が暗黙のWrites[T](どのFormat[T]実装)をとります。

次にOption[User]Option[Tuple5[String, String, String, String, String]]に変換してtoJsonに渡し、コンパイラがこのような書式/書込みを見つけようとします。おそらくあなたが意図したものではありません。

def get(id: Long) = Action { 
    User.findById(id) 
    .map(user => Ok(Json.toJson(user))) 
    .getOrElse(BadRequest(s"Unknown user $id")) 
} 
:あなたが欲しい

は、おそらくこのようなものです

関連する問題