Playframework 2.3.x:Json映射错误"Multiple markers at this line: No unapply function found"



我是Scala和Play框架的新手。尝试通过使用 mongo 反应式和带有 scala 的 play-framework 来创建示例应用程序。但我面临一个问题。当我尝试将我的案例类映射到 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]]

但我需要所有属性。 我该如何解决这个问题?

您的案例类包含超过 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]
}

相关内容

最新更新