0

我在为我与 squeryl 一起使用并扩展 KeyedEntity 的案例类实现 Json Write 时遇到了一个问题。它看起来像这样:

case class Order(fk_soc : Int, order_date: String, date_creation: Timestamp,fk_uther_author: Int, fk_statut : Int, tva : Option[Double], total_ht: Option[Double],total_ttc: Option[Double], note: Option[String]) extends KeyedEntity[Int] {
   val id : Int = 0

  val ref : String = ""


  val date_modif : Option[Timestamp] = Some(new Timestamp(DateTime.now.getMillis))


}

我写道:

implicit val orderFormat : Writes[Order] = (
    ( __ \ 'fk_societe).write[Int] and
    ( __ \ 'order_date).write[String] and
    ( __ \ 'date_creation).write[Timestamp] and
    ( __ \ 'fk_user_author).write[Int] and
    ( __ \ 'fk_statut).write[Int] and
    ( __ \ 'tva).write[Option[Double]] and
    ( __ \ 'total_ht).write[Option[Double]] and
    ( __ \ 'total_ttc).write[Option[Double]] and
    ( __ \ 'note).write[Option[String]]
    )(unlift(Order.unapply)) 

它工作正常,除了我需要在我的 json 中包含“id”字段但由于它在我的案例类的主体中,它不属于生成的值。因此,如果我将“id”字段添加到我的 Writes 中:

implicit val orderFormat : Writes[Order] = (
        ( __ \ 'id).write[Int] and
        ( __ \ 'fk_societe).write[Int] and
        .......

它没有按预期工作......如何实现此写入以包含 id 字段?我需要自定义应用/取消应用方法吗?我强调我的案例类是这样实现的,以便与 squeryl KeyedEntity ( id in the body ...) 一起使用

4

1 回答 1

0

所以我这样解决了:

我根据需要创建了另一个代表我的数据的案例类:首先是:

case class Order(fk_soc : Int, order_date: String, date_creation: Timestamp,fk_uther_author: Int, fk_statut : Int, tva : Option[Double], total_ht: Option[Double],total_ttc: Option[Double], note: Option[String]) extends KeyedEntity[Int] {
  val id : Int = 0
  val ref : String = ""
  val date_modif : Option[Timestamp] = Some(new Timestamp(DateTime.now.getMillis))
}

第二个:

case class OrderJ(id: Int, ref: String, date_modif : Option[Timestamp], fk_soc : Int, order_date: String, date_creation: Timestamp,
                  fk_uther_author: Int, fk_statut : Int, tva : Option[Double], total_ht: Option[Double],
                  total_ttc: Option[Double], note: Option[String])

我用 3 个新字段更新了我的 Writes... (id,ref,date_modif)

然后,当我需要首先执行反序列化时,我将 Order 对象转换为 OrderJ,我使用一个函数进行此转换:

def toOrderJ(o : Order): OrderJ = {
    OrderJ(o.id,o.ref,o.date_modif, o.fk_soc, o.order_date, o.date_creation, o.fk_uther_author,
      o.fk_statut,o.tva, o.total_ht, o.total_ttc, o.note)
  }

然后我才在我的 OrderJ 对象上调用 Json.toJson 并且它按预期工作。但我真的不喜欢这种方法,在我看来,有一个更优雅的解决方案。我真的希望你的建议和意见。

于 2013-06-24T21:47:14.297 回答