【问题标题】:Dynamic assignment of case class in a class declaration在类声明中动态分配案例类
【发布时间】:2020-11-15 10:25:59
【问题描述】:

我们有两个具有不同参数的案例类。例如-

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] 
                      )

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

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

如何将适当的案例类(此处为 OneTypeAnotherType)动态分配给 JSONDeserialize 类,而不会产生重复的 JSONDeserialize 类?

【问题讨论】:

    标签: json scala dynamic case-class


    【解决方案1】:

    我正在考虑两种方法。

    1- 您可以在一个案例类中加入两个案例类,如下所示:

           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

    【讨论】:

      猜你喜欢
      • 2021-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-08
      • 1970-01-01
      • 2015-12-13
      相关资源
      最近更新 更多