У меня есть объект Java Результаты:Джексон маршализацию пользовательского объекта вместо LinkedHashMap
public class MetaData {
private List<AttributeValue<String,Object>> properties
private String name
...
... getters/setters ...
}
AttributeValue класс представляет собой общий класс ключ-значение. Возможно, разные атрибуты AttributeValue вложены. Значение (значение) Объект будет другим атрибутом AttributeValue и так далее.
Из-за устаревшей причины структура этого объекта не может быть изменена.
У меня есть мой JSON, который я пытаюсь сопоставить с этим объектом. Все подходит для обычных объектов. Также первый уровень списка заполняется AttributeValues.
Проблема Объект. Джексон не знает, как интерпретировать это вложенное поведение и просто делает его LinkedHashMap.
Я ищу способ реализовать пользовательское поведение, чтобы сообщить Джексону, что это должен быть объект AttributeValue, а не LinkedHashMap.
Это, как я в настоящее время преобразования JSON:
ObjectMapper om = new ObjectMapper();
MetaData metaData = om.readValue(jsonString, new TypeReference<MetaData>(){});
И это пример JSON. (это получается путем сериализации существующего объекта MetaData для JSON, у меня есть полный контроль над этим синтаксисом).
{
"properties":[
{
"attribute":"creators",
"value":[
{
"attribute":"creator",
"value":"user1"
},{
"attribute":"creator",
"value":"user2"
}
]
},{
"attribute":"type",
"value": "question"
}
],
"name":"example"
}
(кстати: Я пробовал то же самое с помощью GSON, но тогда объект является StringMap и проблема та же решения с использованием GSON также приветствуются.).
редактировать В Using Jackson ObjectMapper with Generics to POJO instead of LinkedHashMap есть комментарий от StaxMan: «LinkedHashMap возвращается только когда информация о типе отсутствует (или, если Object.class определяется как тип).»
Последнее, кажется, здесь проблема. Могу ли я переопределить это?
Вы проверили это: http://stackoverflow.com/questions/22358872/how-to-convert-linkedhashmap-to-custom-java-object –
Спасибо. Да, я сделал это, но это не решение моей проблемы. Объект MetaData создается правильно, и есть список AttributeValues (на первом уровне). Проблема находится на втором уровне, где _Object_ следует заменить другим (вложенным) AttributeValue. – user3319803
В http: // stackoverflow.com/questions/8903863/using-jackson-objectmapper-with-generics-to-pojo-вместо-связанногоhashmap StaxMan говорит: «_LinkedHashMap возвращается только при отсутствии информации о типе * (или если Object.class определен как type) ** «Это похоже на причину, но я хочу переопределить это ... – user3319803