class 声明中 case class 的动态赋值

Dynamic assignment of case class in a class declaration

我们有两种情况 classes 具有不同的参数。例如-

case class OneType(@JsonProperty("column1") column1 : String,
                   @JsonProperty("column2") column2 : Map[String,Any],
                   @JsonProperty("column3") column3 : Seq[String]
                  )
case class AnotherType(@JsonProperty("column1") column1 : String,
                       @JsonProperty("column2") column2 : BigInt,
                       @JsonProperty("column3") column3 : Map[String,String] 
                      )

这两个 case classes 将用于反序列化传入的 JSON 消息(通过将它们与 case class 映射)。它们需要在另一个 class 声明中使用。例如-

class JSONDeserialize extends StreamManager(String, Either[Failed, OneType/AnotherType]){
}

如何将适当的大小写 class(这里是 OneTypeAnotherType)动态分配到 JSONDeserialize class 没有重复 JSON反序列化 class?

我正在考虑 2 种方法。

1- 您可以在一个案例 class 中加入两个案例 class,就像这样:

       case class T(      
                   @JsonProperty("column1") column1 : Option[String],
                   @JsonProperty("column2") column2 : Option[Map[String,Any]],
                   @JsonProperty("column3") column3 : Option[Seq[String]],
                   @JsonProperty("column4") column4 : Option[String],
                   @JsonProperty("column5") column5 : Option[BigInt],
                   @JsonProperty("column6") column6 : Option[Map[String,String]] 
                  )

而且你总是读取唯一的类型 T,它有可选字段,带有 Option,这意味着数据可能不存在,可以是 None。

2- 您可以尝试阅读 OneType,如果失败,请阅读 AnotherType