Ich versuche, eine Klasse zu machen, die den Jackson verwendet, um POJOs zu deserialisieren.Deserialisieren eines generischen Typs mit Jackson
Es sieht wie folgt aus ...
public class DeserialiserImp<T> implements Deserialiser<T> {
protected ObjectMapper objectMapper = new ObjectMapper();
@Override
public T get(String content, Class clazz) throws IOException {
return (T) objectMapper.readValue(content, clazz);
}
@Override
public List<T> getList(String content, Class clazz) throws IOException {
return objectMapper.readValue(content, TypeFactory.collectionType(ArrayList.class, clazz));
}
}
Ich habe 2 Fragen zu dieser Umsetzung.
Die erste besteht darin, dass ich den Klassentyp in die Methoden übergebe, damit der Objektmapper den Typ kennt, der deserialisiert werden sollte. Gibt es einen besseren Weg, Generika zu verwenden?
Auch in der Get-Methode bin ich ein Objekt vom ObjektMapper zu T geworfen. Dies scheint besonders fiese Art und Weise es zu tun, wie ich T hier werfen muss und dann muss ich auch den Objekttyp aus der Methode, die ruft es an.
Ich benutze Roboguice in diesem Projekt, so wäre es nett, wenn ich den Typ durch Injektion ändern und dann das Objekt mit dem generischen Typ kommentieren könnte, den ich es zurückgeben muss. Ich lese über TypeLiteral und frage mich, ob es dieses Problem lösen könnte?
Siehe http://stackoverflow.com/questions/17400850/is-jackson-really-unable-to-deserialize-json-into-a-generic-type – lisak