Home > Mobile >  How to ignore a field from serializing when using circe in scala
How to ignore a field from serializing when using circe in scala

Time:05-18

I am using circe in scala and have a following requirement :

Let's say I have some class like below and I want to avoid password field from being serialised then is there any way to let circe know that it should not serialise password field?

In other libraries we have annotations like @transient which prevent field from being serialised ,is there any such annotation in circe?

case class Employee(                   
                     name: String,
                     password: String)

CodePudding user response:

You could make a custom encoder that redacts some fields:

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]")),
  )
}

LATER UPDATE

In order to avoid going through all fields contramap from a semiauto/auto decoder:

import io.circe.generic.semiauto._

implicit val encodeEmployee: Encoder[Employee] =
  deriveEncoder[Employee]
    .contramap[Employee](unredacted => unredacted.copy(password = "[REDACTED]"))
  • Related