【发布时间】:2021-06-29 05:15:30
【问题描述】:
我正在尝试将“5m”或“5s”或“5ms”形式的字符串解码为 FiniteDuration 类型的对象,它们分别为 5.minutes、5.seconds、5.milliseconds。
我正在尝试为涉及 FiniteDuration 类的项目创建自定义解码器和编码器。编码器没有问题,因为它只是读取 FiniteDuration 类的字段并生成一个字符串。但是,我在编写解码器时遇到了困难,我想知道我正在做的事情是否可行。
FiniteDuration 是一个具有如下构造函数的类:FiniteDuration(length: Long, unit: TimeUnit)。 Scala 附带了一些方便的语法糖,因此可以使用符号 5.minutes、5.seconds 或 5.milliseconds 来调用该类。在这种情况下,Scala 会为您创建 FiniteDuration 类。
想法是将这个 FiniteDuration 类转换为“5m”或“5s”或“5ms”之类的字符串,这样更容易阅读。
implicit val d2json: Encoder[FiniteDuration] = new Encoder[FiniteDuration] {
override def apply(a: FiniteDuration): Json = ???
}
implicit val json2d: Decoder[FiniteDuration] = new Decoder[FiniteDuration] {
override def apply(c: HCursor): Decoder.Result[FiniteDuration] = ???
}
我写的编码器应该没问题。解码器更棘手。我不确定该怎么做,因为 apply 方法需要 HCursor 类型的输入。
【问题讨论】:
标签: json scala json-deserialization circe