0

Play 2.1 と MongoJack を使用して、Mongo db マッピングと Json シリアライゼーション用の scala クラスを作成しています。このモデルにオプションのタプルが必要です (以下の「アップロード」を参照)。ただし、Json Writes がオプション タプルに対して機能することはありません。

class Event (
  @BeanProperty @JsonProperty("name") val name: String,
  @BeanProperty @JsonProperty("message") val message: String
  ) {
  @ObjectId @Id @BeanProperty var eventId: String = _
  @BeanProperty @JsonProperty("upload") var upload: Option[(String, String, Int)] =  _
}

object Event {
  def apply(name: String,
         message: String): Event = new Event(name,message)

  def unapply(e: Event) = 
    new Some((e.name,
              e.message,
              e.upload) )

  import play.api.libs.json.Writes._
  val eventWrites: Writes[Event] = (
    (__ \ 'name).write[String] and
    (__ \ 'message).write[String] and
    (__ \ 'upload).write(Option[( // HOW TO WRITE A OPTIONAL TUPLE?
      (__ \ 'url).write[String] and
      (__ \ 'name).write[String] and
      (__ \ 'size).write[Int]
      tupled
    )])
    )(unlift(Event.unapply))
}

編集1:

アップロードの初期値を

@BeanProperty @JsonProperty("upload") var upload: Option[(String, String, Int)] =  None
4

1 に答える 1

2

あなたの書き込みは次のようになります。

val eventWrites: Writes[Event] = (
  (__ \ 'name).write[String] and
  (__ \ 'message).write[String] and
  (__ \ 'upload).writeNullable((
    (__ \ 'url).write[String] and
    (__ \ 'name).write[String] and
    (__ \ 'size).write[Int]).tupled))(unlift(Event.unapply))

インポートする必要はありませんWrites._

于 2013-08-03T07:36:33.623 に答える