Я занимаюсь модернизацией Jackson с 1.9.4 до 2.2.0. Переход был плавным, за исключением того, что я не могу получить парсинг массива для работы с объектами. В 1.9.4 я мог бы сделать это:
private List<Subjects> mSubjects;
mSubjects = objectMapper.readValue(subjectsJsonArrayNode, new TypeReference<List<Subjects>>() {});
С Jackson 2.2.0 я получаю ошибку компиляции "не могу разрешить метод". Файл заголовка Jackson ObjectMapper для 1.9.4 содержит эти методы readValue для JsonNodes:
public <T> T readValue(JsonNode root, java.lang.Class<T> valueType)
public <T> T readValue(JsonNode root, org.codehaus.jackson.type.TypeReference valueTypeRef)
public <T> T readValue(JsonNode root, org.codehaus.jackson.type.JavaType valueType)
И файл заголовка Jackson 2.2.0:
public <T> T readValue(JsonParser jsonParser, java.lang.Class<T> tClass)
public <T> T readValue(JsonParser jsonParser, com.fasterxml.jackson.core.type.TypeReference<?> typeReference)
public final <T> T readValue(JsonParser jsonParser, com.fasterxml.jackson.core.type.ResolvedType resolvedType)
public <T> T readValue(JsonParser jsonParser, com.fasterxml.jackson.databind.JavaType javaType)
Поэтому мне нужно переключиться с передачи JsonNode на JsonParser, но я не совсем уверен, как сделать этот переход. Тем не менее, я не уверен, что я даже иду по правильному пути, потому что JsonParser определяется как абстрактный класс, поэтому я не могу даже легко инициализировать экземпляр, чтобы поиграть с ним.
Для тех, кто приходит без ответа, вот временное решение, которое у меня есть, где я повторяю и вручную разбираю каждый объект:
private List<Subjects> mSubjects = new ArrayList<Subjects>();
for(JsonNode subjectJsonNode : subjectsJsonArrayNode) {
mSubjects.add(objectMapper.treeToValue(subjectJsonNode, Subject.class));
}