【问题标题】:scala persisting seq with Options带有选项的scala持久序列
【发布时间】:2017-07-03 18:54:52
【问题描述】:

我有

case class ProcessSteps(stepsData: Seq[ProcessStepTemplatesModel])

这个序列可能有空的 ProcessStepTemplatesModel

现在当我想像这样持久化数组时:

request.body.asJson.foreach(f = _.validate[ProcessSteps] match {
      case JsSuccess(processSteps, _) =>
        // PROBLEM HIER
        processSteps.stepsData.foreach(processStep => processTemplateDTO.addProcessStepTemplateToProcessTemplate(processStep, processId).map {

由于 null 值,我收到了错误。

有没有办法 scip 空值并且只保留那些不为空的值?

我正在运行一个使用 slick 作为数据库映射器的 scala Playframework 应用程序

谢谢

【问题讨论】:

  • 使用Option[Seq[ProcessStepTemplatesModel]] 代替null 怎么样?还是使用Seq.empty[T] 作为默认值?
  • Option[Seq is not possible 我不想保留空值,我想跳过它们
  • processSteps.stepsData.filter(_ != null).foreach(...)怎么样?

标签: scala playframework slick


【解决方案1】:

我建议您将ProcessStepTemplatesModel 包装在Option 中以表明可能有null 值: case class ProcessSteps(stepsData: Seq[Option[ProcessStepTemplatesModel]]), 然后filter(_.isDefined) 你的序列只有现有的(不可为空的)步骤并安全地执行其余代码。

【讨论】:

  • 您好,我们也试过了,但后来出现错误implicit val ProcessStepsFormat: OFormat[ProcessSteps] = Json.format[ProcessSteps]
  • 错误是:没有可用的 Seq[Option[models.ProcessStepTemplatesModel]] 的隐式格式。
  • 我有一种感觉,操作这个对象的隐式格式应该被自己覆盖和定义。看起来this thread 的guyz 讨论了相关问题,不是吗?
  • 应该,根据the 2.5 docs paragraph about reading optionsthis answer,我认为这与您的情况非常相似
猜你喜欢
  • 2012-01-15
  • 2021-08-10
  • 1970-01-01
  • 2011-12-22
  • 2021-09-05
  • 2011-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多