0

我使用 Jackson 作为映射器在 Scala 中定义了以下类。

package models

import play.api.Play.current
import org.codehaus.jackson.annotate.JsonProperty
import net.vz.mongodb.jackson.ObjectId
import play.modules.mongodb.jackson.MongoDB
import reflect.BeanProperty
import scala.collection.JavaConversions._
import net.vz.mongodb.jackson.Id
import org.codehaus.jackson.annotate.JsonIgnoreProperties

case class Team( 
  @BeanProperty @JsonProperty("teamName") var teamName: String,
  @BeanProperty @JsonProperty("logo") var logo: String,
  @BeanProperty @JsonProperty("location") var location: String,
  @BeanProperty @JsonProperty("details") var details: String,
  @BeanProperty @JsonProperty("formOfSport") var formOfSport: String) 

object Team {
  private lazy val db = MongoDB.collection("teams", classOf[Team], classOf[String])

  def save(team: Team) { db.save(team) }


  def getAll(): Iterable[Team] = {
    val teams: Iterable[Team] = db.find()    
    return teams
  }

  def findOneByTeamName(teamName: String): Team = {
    val team: Team = db.find().is("teamName", teamName).first
    return team
  }

}

插入 mongodb 没有问题,并且_id会自动为每个文档插入一个。

但现在我想尝试读取(或反序列化)文档,例如通过调用findOneByTeamName. 这总是会导致我使用andUnrecognizedPropertyException for _id.创建实例。即使有自己的 ObjectId,这也不起作用,并且被区别对待。Team.applyTeam.unapply_idid

任何人都可以帮助如何获取实例或如何反序列化吗?提前致谢

4

1 回答 1

1

我正在使用 play-mongojack。这是我的课。你的对象定义很好。

import com.fasterxml.jackson.annotation.JsonProperty
import com.fasterxml.jackson.databind.ObjectMapper
import org.mongojack.{MongoCollection, JacksonDBCollection}
import org.mongojack.ObjectId
import org.mongojack.WriteResult
import com.mongodb.BasicDBObject

import scala.reflect.BeanProperty
import javax.persistence.Id
import javax.persistence.Transient
import java.util.Date
import java.util.List
import java.lang.{ Long => JLong }
import play.mongojack.MongoDBModule
import play.mongojack.MongoDBPlugin
import scala.collection.JavaConversions._
class Event (
  @BeanProperty @JsonProperty("clientMessageId") val clientMessageId: Option[String] = None,
  @BeanProperty @JsonProperty("conversationId") val conversationId: String
  ) {
  @ObjectId @Id @BeanProperty var messageId: String = _ // don't manual set messageId
  @BeanProperty @JsonProperty("uploadedFile") var uploadedFile: Option[(String, String, JLong)] =  None // the upload file(url,name,size)
  @BeanProperty @JsonProperty("createdDate") var createdDate: Date = new Date()
  @BeanProperty @Transient var cmd: Option[(String, String)] =  None // the cmd(cmd,param)

  def createdDateStr() = {
    val format = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
    format.format(createdDate)
  }
}
于 2013-12-10T16:40:54.893 回答