【发布时间】:2015-03-31 23:29:35
【问题描述】:
我使用 Jackson 测试了 Scala 案例类的序列化。
DeserializeTest.java
public static void main(String[] args) throws Exception { // being lazy to catch-all
final ObjectMapper mapper = new ObjectMapper();
final ByteArrayOutputStream stream = new ByteArrayOutputStream();
mapper.writeValue(stream, p.Foo.personInstance());
System.out.println("result:" + stream.toString());
}
}
Foo.scala
object Foo {
case class Person(name: String, age: Int, hobbies: Option[String])
val personInstance = Person("foo", 555, Some("things"))
val PERSON_JSON = """ { "name": "Foo", "age": 555 } """
}
当我运行上面main的Java类时,抛出了异常:
[error] Exception in thread "main" org.codehaus.jackson.map.JsonMappingException:
No serializer found for class p.Foo$Person and no properties discovered
to create BeanSerializer (to avoid exception,
disable SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS) )
如何(反)序列化 Scala 案例类?
【问题讨论】:
-
Jackson 有几个很好的 Scala 包装器;你至少应该考虑使用一个。 Play-json 恰好是我使用的。好的 (IMO) 使用基于类型类的反序列化/序列化,您可以在其中将成员添加到案例类的伴随对象中,以告诉它如何来回映射到 JSON,并为此提供很好的习惯用法。
标签: java json scala serialization jackson