jsonシリアライザが必要なコレクションcolumn tutorial for phantom-dslに続いています。JSONシリアライザ、json4s with phantom-dslコレクションコラム
以下の実装では、次のエラー出力が表示されています。 org.dyne.danielsan.superchain.data.models.JsonVin
[エラー]必須:org.json4s.JValue
[エラー](の拡大)org.json4sを発見
.JsonAST.JValue
[エラー]コンパクト((OBJ)レンダリング)
私が間違っているつもり場所を指しているすべてのヘルプ、感謝。問題は、私の知る限りファントム-DSLを定義するカスタム型を必要とすることであるが、JValue ...
import com.websudos.phantom.CassandraTable
import com.websudos.phantom.dsl._
import org.json4s.{NoTypeHints, _}
import org.json4s.jackson.JsonMethods._
import org.json4s.jackson.Serialization
case class Transaction(blockhash: String,
blocktime: Long,
confirmations: Int,
vout: List[Vout],
vin: List[Vin])
case class JsonVout(value: String,
n: String,
scriptPubKey: String)
case class JsonVin(coinbase: String,
sequence: String)
sealed class TransactionColumnFamily extends CassandraTable[TransactionColumnFamily, Transaction] {
implicit val formats = Serialization.formats(NoTypeHints)
override def fromRow(row: Row): Transaction = {
Transaction(
blockhash(row),
blocktime(row),
confirmations(row),
vout(row),
vin(row)
)
}
object blockhash extends StringColumn(this) with PartitionKey[String]
object blocktime extends LongColumn(this) with ClusteringOrder[Long] with Descending
object confirmations extends IntColumn(this) with ClusteringOrder[Int] with Descending
object vout extends JsonListColumn[TransactionColumnFamily, Transaction, Vout](this) {
override def fromJson(obj: String): Vout = {
parse(obj).extract[Vout]
}
//This is where the first error arises
override def toJson(obj: Vout): String = {
compact(render(obj))
}
}
object vin extends JsonListColumn[TransactionColumnFamily, Transaction, Vin](this) {
override def fromJson(obj: String): Vin = {
parse(obj).extract[Vin]
}
//This is where the second error arises
override def toJson(obj: JsonVin): String = {
compact(render(obj))
}
}
}
object TransactionColumnFamily extends TransactionColumnFamily with RootConnector {
// some more stuff
// some more stuff
}
修正 json4s期待している:コメントを
おかげフラウィウスを。あなたは正しいです。最後に、これはJson4sでの作業のために必要だったものです。
object vout extends JsonListColumn[TransactionColumnFamily, Transaction, Vout](this) {
override def fromJson(obj: String): Vout = {
parse(obj).extract[Vout]
}
override def toJson(obj: Vout): String = {
write(obj)
}
}
object vin extends JsonListColumn[TransactionColumnFamily, Transaction, Vin](this) {
override def fromJson(obj: String): Vin = {
parse(obj).extract[Vin]
}
override def toJson(obj: Vin): String = {
write(obj)
}
}