为什么我没有为scala找到适用的函数。枚举字段的Enumeration.Value?

问题描述 投票:0回答:2

我已经定义了我的枚举字段:

object ContractTypeEnum extends Enumeration {
  type ContractTypeEnum = Value
  val Key1 = Value("key1")
  val Key2 = Value("key2")
}

并在scala Postgres中定义了其映射:

trait  EnumImplicit {
  implicit val ContractTypeEnumMapper = PostgresDriver.createEnumJdbcType("contract_type", ContractTypeEnum)
}

在我的表的案例类中,我将该列定义为:

contractType: Option[ContractTypeEnum.ContractTypeEnum]

并如下创建其Implicit Formatter

implicit val contractTypeFormat = new Format[ContractTypeEnum.ContractTypeEnum] {
    def reads(json: JsValue) = JsSuccess(ContractTypeEnum.withName(json.as[String]))
    def writes(myEnum: ContractTypeEnum.ContractTypeEnum) = JsString(myEnum.toString)
  }

我得到的是以下错误:

Error:(61, 92) No apply function found for scala.Enumeration.Value
    implicit val optionFormat: Format[ContractTypeEnum] = Format.optionWithNull(Json.format[ContractTypeEnum])

并且下面的读者/作家也被写成:

object ContractJsonModel {
  implicit val ContractJsonModelFormat = {
    implicit val optionFormat: Format[ContractTypeEnum] = Format.optionWithNull(Json.format[ContractTypeEnum])
    Jsonx.formatCaseClass[ContractJsonModel]
  }
}

什么是错误,我应该如何解决?

scala enums playframework slick
2个回答
0
投票
我找到了可以按预期工作的解决方案:

object ContractTypeEnum extends Enumeration { type ContractTypeEnum = Value val Key1 = Value("key1") val Key2 = Value("key2") implicit val readsMyEnum = Reads.enumNameReads(ContractTypeEnum) implicit val writesMyEnum = Writes.enumNameWrites }


0
投票
Json中有特殊的格式化方法用于枚举Json.formatEnum。您可以这样写:
© www.soinside.com 2019 - 2024. All rights reserved.