Шаблон Spring Mongo не сохраняет список пользовательских объектов в MongoDb

Я использую Spring Mongo Template для сохранения данных в MongoDb. У меня есть пользовательский объект со списком.

Public Class CustomObject implements Serializable{
       private CustomType1 header; 
       private List<CustomType2> Values; 
}

Я создал класс-оболочку, чтобы обернуть свой пользовательский объект, и класс-оболочка выглядит так:

public Class Wrapper { 
       private String id;
       private Object object; 
}

Я вызываю метод сохранения, как показано ниже

Wrapper wrapper = new wrapper(key, value); 
mongoTemplate.save(wrapper, collectionName);

Я могу сохранить CustomObject в MongoDB, но когда я проверяю документ в mongodb, он показывает только «заголовок», поле «значения» игнорируется. Это не дает никаких ошибок .

Кто-нибудь может мне с этим помочь?


person Bhagath    schedule 21.08.2018    source источник
comment
какой код для CustomType2   -  person Jeryl Cook    schedule 21.08.2018
comment
Некоторый пользовательский класс (POJO), который реализует сериализуемый, который имеет еще несколько подклассов в качестве членов   -  person Bhagath    schedule 21.08.2018
comment
Если у меня есть все эти пользовательские классы в пути к классам приложения, где я вызываю mongoTemplate.save(wrapper, collectionName);, тогда я могу увидеть список пользовательских объектов в качестве третьего поля в документе, вставленном в mongoDB. Но если я не добавлю эти классы в путь к классам, я увижу только два поля во вставленном документе, поле «Список настраиваемых объектов» отсутствует.   -  person Bhagath    schedule 21.08.2018
comment
Любая идея, почему это происходит? @ДжерилКук   -  person Bhagath    schedule 22.08.2018
comment
ваш код неполный, чтобы ответить ..   -  person Jeryl Cook    schedule 22.08.2018


Ответы (1)


я думаю, что это поток, который вы хотите ..

@Document
Public Class CustomObject{
       private CustomType1 header; 
       private List<CustomType2> values;   
}

@Document
public Class Wrapper { 
       @Id
       private String key;
       private CustomObject value; 
}

...
...

CustomObject customObject = new CustomObject(header,values);

Wrapper wrapper = new Wrapper(key, customObject); 

mongoTemplate.save(wrapper)

;

person Jeryl Cook    schedule 22.08.2018
comment
Я хочу сделать этот класс-оболочку универсальным, чтобы мы могли повторно использовать его и для других объектов. Также я не хочу добавлять CustomObject в путь к классам приложения, где я вызываю метод сохранения. - person Bhagath; 22.08.2018
comment
попробуйте использовать эту библиотеку для этого mongojack.org , сопоставляя объекты Java с документами MongoDB - person Jeryl Cook; 22.08.2018
comment
Я пытался использовать MongoJack. Мой пользовательский объект имеет тип календаря и дает IllegalArgumentException: не может сериализовать класс java.util.GregorianCalendar - person Bhagath; 27.08.2018
comment
я не вижу GregorianCalendar в коде, который вы разместили. - person Jeryl Cook; 27.08.2018
comment
частные значения List‹CustomType2›; Этот объект CustomType2 имеет переменную-член типа GregorianCalendar. - person Bhagath; 28.08.2018
comment
Спасибо @JerylCook, я работаю над поиском решения с помощью mongoJack. В процессе я столкнулся со сценарием использования Object Mapper для сопоставления linkedHashMap с Object. При этом я получаю следующее исключение com.fasterxml.jackson.databind.JsonMappingException: ожидаемый тип с плавающей запятой, целое число или строка. Можете ли вы помочь мне с этим. Я уже использую этот mapper.registerModule(new ParameterNamesModule()).registerModule(new Jdk8Module()).registerModule(new JavaTimeModule()); mapper.findAndRegisterModules(); , но по-прежнему дает указанное выше исключение - person Bhagath; 11.09.2018