为什么我没有为scala找到适用的函数。枚举字段的Enumeration.Value?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么我没有为scala找到适用的函数。枚举字段的Enumeration.Value?相关的知识,希望对你有一定的参考价值。
我已经定义了我的枚举字段:
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]
什么是错误,我应该如何解决?
答案
我找到了可以按预期工作的解决方案: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
另一答案
Json中有特殊的格式化方法用于枚举Json.formatEnum
。您可以这样写:以上是关于为什么我没有为scala找到适用的函数。枚举字段的Enumeration.Value?的主要内容,如果未能解决你的问题,请参考以下文章