简体   繁体   中英

JSON serialization of Scala enums using Jackson

Following this article https://github.com/FasterXML/jackson-module-scala/wiki/Enumerations

The enumeration declaration is as

object UserStatus extends Enumeration {
  type UserStatus = Value
  val Active, Paused = Value
}

class UserStatusType extends TypeReference[UserStatus.type]
case class UserStatusHolder(@JsonScalaEnumeration(classOf[UserStatusType]) enum:   UserStatus.UserStatus)

The DTO is declared as

class UserInfo(val emailAddress: String, val  userStatus:UserStatusHolder) {

}

and the serialization code is

val mapper = new ObjectMapper()
mapper.registerModule(DefaultScalaModule)

def serialize(value: Any): String = {
    import java.io.StringWriter
    val writer = new StringWriter()
    mapper.writeValue(writer, value)
    writer.toString
}

The resulting JSON serialization is

{
    "emailAddress":"user1@test.com",
    "userStatus":{"enum":"Active"}
}

Is it possible to get it the following form ?

{
    "emailAddress":"user1@test.com",
    "userStatus":"Active"
}

Have you tried:

case class UserInfo(
   emailAddress: String, 
   @JsonScalaEnumeration(classOf[UserStatusType]) userStatus:   UserStatus.UserStatus
)

The jackson wiki's example is a little misleading. You don't need the holder class. Its just an example of a thing that has that element. The thing you need is the annotation

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM