Tôi đang cố gắng để tạo ra một lớp học sử dụng Jackson để deserialize POJO của.Deserializing một loại chung với Jackson
Nó trông như thế này ...
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));
}
}
Tôi có 2 câu hỏi về việc thực hiện này.
Đầu tiên là tôi chuyển loại lớp vào các phương thức để đối tượng trình biết loại cần deserialize. Có cách nào tốt hơn bằng cách sử dụng generics? Cũng trong phương thức get, tôi đang truyền một đối tượng được trả về từ objectMapper đến T. Điều này có vẻ đặc biệt khó chịu khi thực hiện nó vì tôi phải cast T ở đây và sau đó tôi cũng phải cast kiểu đối tượng từ phương thức đang gọi nó.
Tôi đang sử dụng Roboguice trong dự án này vì vậy sẽ tốt hơn nếu tôi có thể thay đổi loại thông qua tiêm và sau đó chú thích đối tượng mà loại Generic tôi cần để trả lại. Tôi đọc về TypeLiteral và tự hỏi nếu nó có thể giải quyết vấn đề này?
Xem http://stackoverflow.com/questions/17400850/is-jackson-really-unable-to-deserialize-json-into-a-generic-type – lisak