Мы используем org.mongodb.morphia для преобразования объектов BasicDBObjects перед сохранением. Одна из возникающих проблем заключается в том, что в некоторых случаях объект для преобразования содержит пустой HashMap, размер которого равен 0, после преобразования HashMap преобразуется в значение null. Таким образом, NullPointerException добавляет более поздний доступ. Хочу обратиться за помощью к знатокам, есть ли способ избежать этого? Я имею в виду, что после преобразования это все еще HashMap с размером 0.
Часть класса для преобразования:
public class ProjectServiceAdapterConfig {
@NotNull
private String serviceAdapterId;
@NotNull
private String projectId;
@Embedded
@Flatten
private Map<String, Map<String, String>> connections = new HashMap<>();
//...... setter and getter skipped here
}
код для конвертации:
// create a mapper with default MapperOptions
private Mapper createMapper() {
return new Mapper();
}
ReplaceableItem objectToItem(final ProjectServiceAdapterConfig obj) {
final Mapper mapper = createMapper();
final MappedClass mc = mapper.getMappedClass(obj.getClass());
final Map<String, Object> map = mapper.toDBObject(obj).toMap();
}
объект создается в другом месте. После некоторой отладки я обнаружил, что объект содержит пустую карту (следующие данные, скопированные из отладчика IntelliJ IDEA):
connections = {java.util.LinkedHashMap@8890} size = 1
[0] = {java.util.LinkedHashMap$Entry@8894}"accounts" -> size = 0
key: java.lang.String = {java.lang.String@8895}"accounts"
value: java.util.LinkedHashMap = {java.util.LinkedHashMap@8896} size = 0
и тот, что после преобразования:
[2] = {java.util.LinkedHashMap$Entry@8910}"connections" -> size = 1
key: java.lang.String = {java.lang.String@8911}"connections"
value: com.mongodb.BasicDBObject = {com.mongodb.BasicDBObject@8912} size = 1
[0] = {java.util.LinkedHashMap$Entry@8923}"accounts" -> null
key: java.lang.String = {java.lang.String@8895}"accounts"
value: = null
Как видите, он преобразуется в null, чего мы пытаемся избежать. Спасибо