Json 自动派生所有类型的已配置编解码器
我目前使用已配置的编解码器将json解码为案例类。看起来像Json 自动派生所有类型的已配置编解码器,json,scala,circe,Json,Scala,Circe,我目前使用已配置的编解码器将json解码为案例类。看起来像 import io.circe.{Decoder, Encoder} import io.circe.generic.AutoDerivation import io.circe.generic.extras.Configuration import io.circe.generic.extras.decoding.ConfiguredDecoder import io.circe.generic.extras.semiauto._ i
import io.circe.{Decoder, Encoder}
import io.circe.generic.AutoDerivation
import io.circe.generic.extras.Configuration
import io.circe.generic.extras.decoding.ConfiguredDecoder
import io.circe.generic.extras.semiauto._
import shapeless.Lazy
final case class A(...)
final case class B(...)
final case class C(...)
object Cdcs extends AutoDerivation {
implicit def configuration: Configuration = Configuration.default.withSnakeCaseMemberNames
implicit def aDecoder: Decoder[A] = deriveConfiguredDecoder[A]
implicit def bDecoder: Decoder[B] = deriveConfiguredDecoder[B]
implicit def cDecoder: Encoder[C] = deriveConfiguredEncoder[C]
}
问题是,当添加新实体时,很容易忘记添加编解码器(我刚刚添加过)。所以我很好奇如何自动配置解码器派生。我试过了
import io.circe.{Decoder, Encoder}
import io.circe.generic.AutoDerivation
import io.circe.generic.extras.Configuration
import io.circe.generic.extras.decoding.ConfiguredDecoder
import io.circe.generic.extras.semiauto._
import shapeless.Lazy
object Cdcs extends AutoDerivation {
implicit def configuration: Configuration = Configuration.default.withSnakeCaseMemberNames
implicit def configuredDecoder[Entity: Decoder](implicit
decode: Lazy[ConfiguredDecoder[Entity]]
): Decoder[Entity] =
deriveConfiguredDecoder[Entity]
}
但在这种情况下,生成并应用未配置的解码器。有没有办法自动生成这样的
解码器
?也许一些宏在这里会有帮助?目前,您使用的是半自动,您可以切换到circe默认提供的自动派生。我会简单地使用单元测试来检查所有公开模型的序列化格式——若测试无法编译,我就忘了编解码器。Auto的缺点是,同一个编解码器会在每个呼叫站点上多次派生,并且如果您使用某些自定义项并在某些范围内导入失败,则会产生不匹配的编解码器。目前,您使用的是semiauto,而您可以切换到circe默认提供的自动派生。我会简单地使用单元测试来检查所有公开模型的序列化格式——若测试无法编译,我就忘了编解码器。Auto的缺点是,同一个编解码器将在每个呼叫站点上多次派生,并且如果您使用某些自定义,并且无法在某个范围内导入它,则会产生不匹配的编解码器。