在 Lagom 上用 Scala 映射两个案例类

在 Lagom 上用 Scala 映射两个案例类

我是 scala/Lagom 的初学者,有人可以帮助我解决以下问题:

我正在尝试为产品字段创建一个 Api,为了做到这一点:我需要将扩展​​到名为 SmartJsonField 的特征的案例类与为 Api 创建的具有名为 Field 的特征的其他案例类进行映射

像这样 :

trait SmartJsonField {
    type Typ

    def name: String

    def isRequired: Boolean

    def validations: Set[ValidationKey]

   
  }

case class Str(name: String, isRequired: Boolean = true, regex: Option[String], minLength: Option[Int], maxLength: Option[Int], validations: Set[ValidationKey] = Set()) extends SmartJsonField {

      type Typ = String

      lazy val optRegex: Option[Regex] = regex.map(_.r)

我想用这个特征的类来映射它

sealed trait Field 
  {
    def isRequired : Boolean
    def validations: Set[ValidationKeyApi]
  }


  case class FieldString(required : Boolean,
                         min : Option[Int], max : Option[Int],  regex: Option[String],  validations: Set[ValidationKeyApi]= Set()) extends Field // a field that takes a String value
{
  override def isRequired = required
}

以下是我进行映射的方法:

def recursiveFieldMapping( fieldSchema : SmartJsonField) : Field = {
    fieldSchema match {
      
      case field: SmartJsonField.Str =>
        FieldString(field.isRequired, field.minLength, field.maxLength, field.regex, field.validations)
      
    }
  }

它适用于除以下所有参数之外的参数字段验证,因为它不是来自同一类型:

required : Set[ValidationKeyApi] 
found : Set[ValidationKey]

以下是案例类 ValidationKey 和 ValidationKeyApi:

  case class ValidationKey(key: String, priority: Option[Int] = None)

  case class ValidationKeyApi(key: String, priority: Option[Int] = None)

正如您所看到的,这是同样的事情,但由于我无法导入它们(Lagom 框架),所以我不知道如何继续。

答案1

发布 30 分钟后我找到了解决方案:

我只需要将新的案例类 ValiationKeyApi 与案例类 ValidationKey 进行映射,如下所示

 FieldString(field.isRequired, field.minLength, field.maxLength, field.regex ,field.validations.map { ValidationKey =>
          ValidationKeyApi(ValidationKey.key, ValidationKey.priority)
        })

相关内容