使用Jackson的Scala枚举的JSON序列化

np-*_*ard 10 scala jackson

以下文章https://github.com/FasterXML/jackson-module-scala/wiki/Enumerations

枚举声明为

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)
Run Code Online (Sandbox Code Playgroud)

DTO被宣布为

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

}
Run Code Online (Sandbox Code Playgroud)

和序列化代码是

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
}
Run Code Online (Sandbox Code Playgroud)

生成的JSON序列化是

{
    "emailAddress":"user1@test.com",
    "userStatus":{"enum":"Active"}
}
Run Code Online (Sandbox Code Playgroud)

有可能得到以下形式吗?

{
    "emailAddress":"user1@test.com",
    "userStatus":"Active"
}
Run Code Online (Sandbox Code Playgroud)

dev*_*rts 6

你有没有尝试过:

case class UserInfo(
   emailAddress: String, 
   @JsonScalaEnumeration(classOf[UserStatusType]) userStatus:   UserStatus.UserStatus
)
Run Code Online (Sandbox Code Playgroud)

杰克逊维基的例子有点误导.你不需要这holder门课.它只是具有该元素的事物的一个例子.你需要的是注释