在scala中使用circe时如何忽略序列化的字段
How to ignore a field from serializing when using circe in scala
我在 scala 中使用 circe 并且有以下要求:
假设我有一些像下面这样的 class,我想避免密码字段被序列化,那么有没有什么办法让 circe 知道它不应该序列化密码字段?
在其他库中,我们有像@transient 这样的注释来防止字段被序列化,在circe 中是否有这样的注释?
case class Employee(
name: String,
password: String)
您可以制作一个自定义编码器来编辑某些字段:
implicit val encodeEmployee: Encoder[Employee] = new Encoder[Employee] {
final def apply(a: Employee): Json = Json.obj(
("name", Json.fromString(a.name)),
("password", Json.fromString("[REDACTED]")),
)
}
稍后更新
为了避免通过 semiauto/auto 解码器的所有字段 contramap:
import io.circe.generic.semiauto._
implicit val encodeEmployee: Encoder[Employee] =
deriveEncoder[Employee]
.contramap[Employee](unredacted => unredacted.copy(password = "[REDACTED]"))
我在 scala 中使用 circe 并且有以下要求:
假设我有一些像下面这样的 class,我想避免密码字段被序列化,那么有没有什么办法让 circe 知道它不应该序列化密码字段?
在其他库中,我们有像@transient 这样的注释来防止字段被序列化,在circe 中是否有这样的注释?
case class Employee(
name: String,
password: String)
您可以制作一个自定义编码器来编辑某些字段:
implicit val encodeEmployee: Encoder[Employee] = new Encoder[Employee] {
final def apply(a: Employee): Json = Json.obj(
("name", Json.fromString(a.name)),
("password", Json.fromString("[REDACTED]")),
)
}
稍后更新
为了避免通过 semiauto/auto 解码器的所有字段 contramap:
import io.circe.generic.semiauto._
implicit val encodeEmployee: Encoder[Employee] =
deriveEncoder[Employee]
.contramap[Employee](unredacted => unredacted.copy(password = "[REDACTED]"))