Reputation: 58
I have the following class defined in Scala using Jackson as mapper.
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
}
}
Inserting into mongodb works without problems and an _id
is automatically inserted for every document.
But now I want to try read (or deserialize) a document e.g. by calling findOneByTeamName
. This always causes an UnrecognizedPropertyException for _id.
I create the instance with Team.apply
and Team.unapply
. Even with an own ObjectId this doesn't work as _id
and id
are treated different.
Can anyone help how the get the instance or how to deserialize right? Thanks in advance
Upvotes: 0
Views: 846
Reputation: 9428
I am using play-mongojack. Here is my class. You object definition is fine.
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)
}
}
Upvotes: 1