首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Scala循环json库中不能用LocalDateTime的自定义解码器反序列化对象

在Scala循环json库中不能用LocalDateTime的自定义解码器反序列化对象
EN

Stack Overflow用户
提问于 2018-10-16 20:34:39
回答 1查看 1.3K关注 0票数 2

我试图为LocalDateTime对象的case类添加自定义反序列化器,但是它从circe-java8模块中提取默认反序列化器。如果删除此模块,代码将无法编译(找不到用于LocalDateTime的反序列化程序)

sbt

代码语言:javascript
复制
"io.circe" %% "circe-core" % circeVersion,
"io.circe" %% "circe-generic" % circeVersion,
"io.circe" %% "circe-parser" % circeVersion,
"io.circe" %% "circe-optics" % circeVersion,
"io.circe" %% "circe-java8" % circeVersion,

和带有自定义LocalDateTime序列化程序/反序列化器的源代码。

代码语言:javascript
复制
case class A(
  date: LocalDateTime,
)

object A {
  val formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")
  implicit val dateEncoder = Encoder.encodeString.contramap[LocalDateTime](_.format(formatter))
  implicit val dateDecoder = Decoder.decodeString.emap[LocalDateTime](str => {
    Either.catchNonFatal(LocalDateTime.parse(str, formatter)).leftMap(_.getMessage)
  })
}

如何将对象A中指定的A对象的自定义反序列化器应用于A case类?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-16 20:46:52

A使用半自动派生

代码语言:javascript
复制
import io.circe.generic.semiauto._

case class A(
  date: LocalDateTime,
)

object A {
  val formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")
  implicit val dateEncoder = Encoder.encodeString.contramap[LocalDateTime](_.format(formatter))
  implicit val dateDecoder = Decoder.decodeString.emap[LocalDateTime](str => {
    Either.catchNonFatal(LocalDateTime.parse(str, formatter)).leftMap(_.getMessage)
  })
  implicit val AEncoder = deriveEncoder[A]
  implicit val ADecoder = deriveDecoder[A]
}
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52843673

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档