Próbuję stworzyć klasę, która używa Jacksona do deserializacji POJO.Deserializowanie rodzaju ogólnego z Jacksonem
Wygląda to tak ...
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));
}
}
Mam 2 pytania dotyczące tej realizacji.
Po pierwsze, przekazuję typ klasy do metod, dzięki czemu obiekt poznaje typ, który powinien deserializować. Czy istnieje lepszy sposób korzystania z generycznych?
Również w metodzie get rzutuję obiekt zwrócony z obiektuMapper na T. Wydaje się to szczególnie nieprzyjemny sposób, ponieważ muszę tu rzutować T, a następnie muszę również rzutować typ obiektu z metody, która nazywa to.
Używam Roboguice w tym projekcie, więc byłoby miło, gdybym mógł zmienić typ poprzez wstrzyknięcie, a następnie dodać obiekt, który typowy jest mi potrzebny do powrotu. Czytałem o TypeLiteral i zastanawiasz się, czy to może rozwiązać ten problem?
Zobacz http://stackoverflow.com/questions/17400850/is-jackson-really-unable-to-deserialize-json-into-a-generic-type – lisak