2015-07-23 7 views
8

После этой статьи https://github.com/FasterXML/jackson-module-scala/wiki/EnumerationsJSON сериализации Scala перечислений с использованием Джексона

Декларация перечисления в

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) 

DTO объявлен

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

} 

и код сериализации является

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 
} 

В результате JSON сериализации

{ 
    "emailAddress":"[email protected]", 
    "userStatus":{"enum":"Active"} 
} 

Можно ли получить его с помощью следующей формы?

{ 
    "emailAddress":"[email protected]", 
    "userStatus":"Active" 
} 

ответ

4

Вы пробовали: пример

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

Джексона вики является немного вводит в заблуждение. Вам не нужен класс holder. Это просто пример того, что имеет этот элемент. Нужна аннотация

+0

Отлично работает. Благодаря :-) – sriram

Смежные вопросы