Ho testato la serializzazione di una classe di case Scala utilizzando Jackson.Uso di Jackson per (De) -serializzare una classe di case 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 } """
}
Quando ho eseguito quanto sopra main
della classe Java, È stata generata un'eccezione:
[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))
Come è possibile (de) -sializzare le classi caso Scala?
Ci sono diversi buoni Scala wrapper per Jackson; dovresti almeno considerare di usarne uno. Il fatto è che Play-json è quello che uso. I buoni (IMO) utilizzano la de/serializzazione basata sulla classe di caratteri, in cui si aggiungono membri all'oggetto companion della classe case per dirgli come eseguire il mapping avanti e indietro su JSON e fornire buoni idiomi per farlo. –