Чтобы десериализовать карту, мне нужно прочитать свойство в моем объекте json.Parse JSON и делегат по умолчаниюDeserializer в JsonDeserializer
Я добавил пользовательский десериализатор, который анализирует json и задает найденный тип в атрибуте контекста. Этот атрибут позже используется во втором десериализаторе, который десериализует пользовательскую карту пользователя.
К сожалению, это решение не сработало, так как я изменяю currentToken jsonParser. Следовательно, defaultDeserializer не может продолжить синтаксический анализ ответа.
Вызванный: java.lang.NullPointerException на com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeOther (BeanDeserializer.java:151) на com.fasterxml.jackson.databind.deser.BeanDeserializer .deserialize (BeanDeserializer.java:144) на UserDeserializer.deserialize (UserDeserializer.java:36)
@Override
public User deserialize(JsonParser jsonParser, DeserializationContext ctxt) throws IOException, JsonProcessingException {
JsonNode node = jsonParser.readValueAsTree();
JsonNode typeNode = node.get("type");
String typeName = schemaNode.get("name").textValue();
ctxt.setAttribute("typeName", typeName);
User userResponse = (User) defaultDeserializer.deserialize(jsonParser, ctxt);
return userResponse;
}
Мой JSON выглядит следующим образом:
{
"username": "test",
"type": { "name": "testtype" },
"map": { "test": 1234 }
}
Есть ли способ сбросить парсер json или использовать другой? Или можно использовать конкретный JsonNode для десериализации?
Изменение json не является вариантом.
Я не вижу, как это решает проблему. Он просто показывает, как десериализовать json двумя разными способами. Можете ли вы, возможно, разработать? – Jotschi
Прошу прощения. Возможно, я не понял первоначальный вопрос. Трассировка стека и фрагмент кода не ясны, и я думал, что вы пытаетесь опровергнуть объект Json в объект. – deanw