【发布时间】:2020-05-19 10:40:25
【问题描述】:
我正在尝试为两个案例类生成编码器和解码器:
object EventBusCases {
case class ValuationRequest(function: RequestValue = ALL_DAY_VALS, interval: RequestValue = IntraDayIntervals.MIN_5)
implicit val requestDecoder: Decoder[ValuationRequest] = deriveDecoder[ValuationRequest]
implicit val requestEncoder: Encoder[ValuationRequest] = deriveEncoder[ValuationRequest]
case class ValuationResponse(values: List[Valuation], function: RequestValue)
implicit val responseDecoder: Decoder[ValuationResponse] = deriveDecoder[ValuationResponse]
implicit val responseEncoder: Encoder[ValuationResponse] = deriveEncoder[ValuationResponse]
}
我不断收到类似这样的错误,但对于这两种情况:
could not find Lazy implicit value of type io.circe.generic.encoding.DerivedAsObjectEncoder[eventbus.eventBusCases.ValuationResponse]
我决定也尝试为这些类中的自定义类派生编码器和解码器,例如“Valuation”,但我在这些类上也遇到了同样的错误。
我正在使用 Circe 0.12.3 和 Scala 2.12.8,这些是我与 Circe 相关的 Scala 依赖项:
"com.beachape" %% "enumeratum" % "1.5.14",
"com.beachape" %% "enumeratum-circe" % "1.5.22",
"io.circe" %% "circe-core" % "0.12.3",
"io.circe" %% "circe-generic" % "0.12.3",
"io.circe" %% "circe-parser" % "0.12.3"
【问题讨论】:
-
只是一个猜测 - 确保像
Valuation这样的自定义类的解码器/编码器在隐式范围内deriveDecoder[ValuationResponse]和deriveEncoder[ValuationResponse]。 -
是的,它们与这些基本相同。在具有案例类并作为“隐式验证”的对象内
-
它们是在同一个
EventBusCases对象内还是不同的对象内?如果不同,请确保那些隐含的 import 。在伴生对象中声明此类类型类的隐式实例也是一种好习惯,因此它们将存在于隐式范围内。 -
估值是一个由 2 个案例类扩展的特征,其中任何一个都可以进入一个 ValuationResponse,这可能是个问题吗?该列表将包含其中一种类型的对象,而不是同一类型的两种类型。
-
@IvanKurchenko 我已经用我解决它的方式发布了一个答案。如果您想检查。
标签: json scala generics derived circe