2017-08-15 8 views
0

私は2ヶ月間のScala、スリック、アッカのことを学んだし、アッカの事業を行っているとき、私は問題を抱えて...Scalaのスリック - 省略ID列(AUTO_INCREMENT)

// This case class is to use for parsing data from request 
// case class UserTransaction(sender: String, recipient: String, amount: Int) 

//This one is to use for reflecting database 
case class UserTransactionDB(sender: String, recipient: String, amount: Int, id: Int) 

class UserTransactionModelDB(tag: Tag) extends Table[UserTransactionDB](tag, "usertransaction") 
{ 
    def id = column[Int]("id", O.PrimaryKey, O.AutoInc) 
    def sender = column[String]("sender") 
    def recipient = column[String]("recipient") 

    def amount = column[Int]("amount") 

    override def * = 

     (sender, recipient, amount, id) <> (UserTransactionDB.tupled, UserTransactionDB.unapply) 

} 

私はPOSTを送信したいですこのようなアッカへの要求(JSON):今すぐ

{"sender" : "S" , "recipient" : "R", "amount" : 100} 

、私だけではなく、データベースを反映するように、とだけでなく、データを解析する(UserTransactionDBで「ID」フィールドなし)ただ一つだけの場合クラスのUserTransactionを使用したいです要求。これは可能ですか?

ありがとうございました。

+0

あなたはどのようなJSONライブラリを使用しているの?私は 'spray-json'を仮定しています...その場合、あなたは' id'フィールドを取り除くスプレーjsonシリアライザを提供することができます。 – mfirry

+0

@mfirryはい、jsonFormat4(UserTransactionDB.apply)を使用しています – dOshu

+0

@mfirryこれは意味ですか? https://github.com/spray/spray-json#providing-jsonformats-for-other-types – dOshu

答えて

0

...カスタム形式でこれらの線に沿って何かしてみてください。

case class UserTransactionDB(sender: String, recipient: String, amount: Int, id: Int) 

object MyJsonProtocol extends DefaultJsonProtocol { 
    implicit object UserTransactionJsonFormat extends RootJsonFormat[UserTransactionDB] { 
    def write(c: UserTransactionDB) = 
     JsArray(JsString(c.sender), JsString(c.recipient), JsNumber(c.amount)) 

    def read(value: JsValue) = value match { 
     case JsArray(Vector(JsString(sender), JsString(recipient), JsNumber(amount))) => 
     new UserTransactionDB(sender, recipient, amount.toInt) 
     case _ => deserializationError("UserTransactionDB expected") 
    } 
    } 
}