0

私はscalaとplayフレームワークが初めてです。mongo Reactive と play-framework と scala を使用してサンプル アプリケーションを作成しようとしています。しかし、私は問題に直面しています。ケース クラスをマッピングして JSON 用にフォーマットしようとすると、json フォーマッタで次のコンパイル時エラーが発生します。

Multiple markers at this line: No unapply function found

以前にも簡単な例を作成しましたが、その例は正常に実行されました。これは問題を引き起こします。以下は私のケースクラスコードです:

case class Video (
var _id: Option[BSONObjectID],
var title: Option[String],
var alias: Option[String],
var categoryIds: Option[List[BSONObjectID]],
var tags: Option[List[String]],
var thumbnailImg: Option[String],
var videoCoverImg: Option[String],
var videoUrl: Option[String],
var isRemote: Option[Boolean],
var userId: Option[BSONObjectID],
var videoEmbedCode: Option[String],
var isPublic: Option[Boolean],
var description: Option[String],
var isPublished: Option[Boolean],
var isRecommended: Option[Boolean],
var access: Option[String],
var uploadedOn: Option[BSONDateTime],
var modifiedOn: Option[BSONDateTime],
var likeCount: Option[Int],
var dislikeCount: Option[Int],
var hitCount: Option[Int],
var metaDesc: Option[String],
var metaKeywords: Option[List[String]],
var author: Option[String]
)

object VideoJsonFormatter {
   implicit val videoJsonFormat = Json.format[Video]
}

このimplicit val videoJsonFormat = Json.format[Video]式は、コンパイル時エラーを作成します:

 Multiple markers at this line: No unapply function found

私のコントローラーコード:

def dashboard = Action.async{
  logger.info("In dashboard controller method");

  var cursor: Cursor[Video] = videosCollection.find(Json.obj()).cursor[Video];
  val videosList : Future[List[Video]] = cursor.collect[List](10, true);
  videosList.map { videos => Ok(Json.toJson(videos)) } 
 }

このvar cursor: Cursor[Video] = videosCollection.find(Json.obj()).cursor[Video];式は、コンパイル時エラーを生成します。

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

一部のプロパティにコメントを付けると、クラスの場合、これは正常に機能します。これらのプロパティは次のとおりです。

var tags: Option[List[String]]
var userId: Option[BSONObjectID]
var metaKeywords: Option[List[String]]

しかし、私はすべてのプロパティが必要です。どうすればこれを解決できますか?

4

1 に答える 1

0

ケース クラスに 21 を超えるフィールドが含まれているため、エラーが発生し、BSONObjectID と BSONDateTime にも暗黙的な形式を指定する必要があります。

ケースクラスを次のように変更します。

case class Video (
                   var _id: Option[BSONObjectID],
                   var title: Option[String],
                   var alias: Option[String],
                   var categoryIds: Option[List[BSONObjectID]],
                   var tags: Option[List[String]],
                   var thumbnailImg: Option[String],
                   var videoCoverImg: Option[String],
                   var videoUrl: Option[String],
                   var isRemote: Option[Boolean],
                   var userId: Option[BSONObjectID],
                   var videoEmbedCode: Option[String],
                   var isPublic: Option[Boolean],
                   var description: Option[String],
                   var isPublished: Option[Boolean],
                   var isRecommended: Option[Boolean],
                   var access: Option[String],
                   var additional : Additional
                   )

case class Additional(                   var uploadedOn: Option[BSONDateTime],
                                         var modifiedOn: Option[BSONDateTime],
                                         var likeCount: Option[Int],
                                         var dislikeCount: Option[Int],
                                         var hitCount: Option[Int],
                                         var metaDesc: Option[String],
                                         var metaKeywords: Option[List[String]],
                                         var author: Option[String])

object AdditionalForm{
  implicit val xJsonFormat = Json.format[Additional]
}

object VideoJsonFormatter {
  import AdditionalForm._
  implicit val videoJsonFormat = Json.format[Video]
}
于 2015-03-12T12:43:42.427 に答える