я должен перенести следующий код из Джексон 1,9 до 2,0Переносите Джексона JsonDeserializer от 1,9 до 2,0
public class ObjectIdDeserializer extends JsonDeserializer<ObjectId> {
@Override
public ObjectId deserialize(JsonParser jp, DeserializationContext context) {
JsonNode oid = jp.readValueAsTree().get("$oid");
return new ObjectId(oid.getTextValue());
}
}
Поскольку тип возврата readValueAsTree()
изменилось от JsonNode
до TreeNode
Я не могу больше доступа к его значению. Я пробовал hasCurrentToken()
, nextToken()
и другие странные методы, подобные тем, которые не нашли способ получить доступ к узлам дерева. Метод get
, который я использовал, полагается на map
, поэтому ему не нужна никакая итерация.
Точно. Причина добавления дополнительного типа TreeNode заключалась в уменьшении размера ядра jar: базовый тип JsonNode довольно велик, и ядро действительно не нужно делать то, что у него есть. Это требует upcast для конкретного случая при переходе от основного типа (например, JsonParser или JsonGenerator). – StaxMan
Еще одно замечание: в этом случае вам также понадобится явный листинг: из-за универсального параметра метода простое присвоение 'JsonNode' должно работать без литья (листинг выводится компилятором, добавляется под капотом) / – StaxMan