case class 参数的值不是 Serializable 的成员

value of case class parameter is not a member of Serializable

我正在尝试为 Json 结构构建一个验证器,此时我已经有了如下内容:

读取定义

case class SubTaskConfigElement(name: String)

case class MultiSelectConfig(subTasks: Seq[SubTaskConfigElement])

implicit val subTaskConfigElementReads: Reads[SubTaskConfigElement] =
    (__ \ "name").read[String](minLength[String](0)).map(SubTaskConfigElement)

implicit val multiSelectConfigReads: Reads[MultiSelectConfig] = (
    (__ \ "subTasks").read[Seq[SubTaskConfigElement]]
).map(MultiSelectConfig)

我有一个单元测试如下:

val configJson = Json.parse(
                """
                  |{
                  |    "subTasks": [
                  |        { "name": "Sub Task 1" },
                  |         { "name": "Sub Task 2" },
                  |        { "name": "Sub Task 3" }
                  |    ]
                  |}
                """.stripMargin)

            val valid = configJson.validate[MultiSelectConfig] getOrElse JsError

            logger.info(valid + "")

            valid must beAnInstanceOf[MultiSelectConfig]
            valid.subTasks must beAnInstanceOf[List[SubTaskConfigElement]]

在测试的最后一行执行测试时出现错误:

[error] /app/process-street/test/validation/widget/config/FormFieldWidgetSpec.scala:29: value subTasks is not a member of Serializable
[error]             valid.subTasks must beAnInstanceOf[Seq[SubTaskConfigElement]]

IntelliJ 还将它识别为一个问题:"Cannot resolve symbol subTasks"

为什么会这样?我想念什么?

谢谢。

问题出在这一行:

val valid = configJson.validate[MultiSelectConfig] getOrElse JsError

valid 的类型被推断为 Serializable,因为这是 MultiSelectConfigJsError 的共同父类型。都是 case 类 和 case 类 自动继承自 `Serializable.