2017-08-02 58 views
1

我有兩個相同的case類,比方說case類之間的轉換具有相同的結構

case class JsonOutput(
    creationDate: ZonedDateTime, 
    updateDate: ZonedDateTime, 
    doctorName: String, 
    patientName: String, 
    userName: String 
) 

case class DbOutput(
    creationDate: ZonedDateTime, 
    updateDate: ZonedDateTime, 
    doctorName: String, 
    patientName: String, 
    userName: String 
) 

其在結構上是相同的,但沒有一定的關係(和它們的相似性可能會在未來發生變化)

我想將DbOutput類型,我從數據庫中獲取到JsonOutput,後來我將用於轉換(由Play Json)like

//fullCase is of type JsonOutput 
Ok(Json.obj("case" -> fullCase)) 

我該怎麼做?

注:

什麼的巢式病例類結構的情況下,要做到:

case class GeneralInfo(number: Int) 

// Nested case class structure 
case class JsonOneOutput(text: String) 
case class JsonThreeOutput(meta: JsonOneOutput, info: GeneralInfo) 

// Nested case class structure  
case class DbOneOutput(text: String) 
case class DbThreeOutput(meta: DbOneOutput, info: GeneralInfo) 

,我不得不再次轉換DbOutputJsonOutput(和所有類型相同,除了一些葉節點類型如DbOneOutputJsonOneOutput,它們可以處於較深層次)

回答

1

您似乎想要這樣做與無形,所以我建議你看看documentation。如何實現這一點的一個例子是:

import shapeless.Generic 

object FooBar { 

    case class Foo(a: String, b: Int, c: String) 
    case class Bar(x: String, y: Int, z: String) 

    def main(args: Array[String]): Unit = { 
    val genFoo = Generic[Foo] 
    val genBar = Generic[Bar] 

    println(genBar.from(genFoo.to(Foo("foobar", 5, "barfoo")))) 
    } 

} 
+0

我看到這個文檔,但如何做到這一點與多個'字符串'類型?它看起來像必須使用'LabelledGeneric',但我不明白如何利用它。 – likern

相關問題