MongoDB Morphia использует только пользовательский конвертер декодирования и конвертер кодирования по умолчанию - PullRequest
0 голосов
/ 26 февраля 2019

У меня проблема с использованием пользовательских преобразователей Morphia для отображения вложенных документов.В моем сценарии у меня есть неизменяемая сущность без конструктора null-arg.Эта сущность используется как встроенная сущность в моей основной сущности.Поскольку он неизменен, я должен объявить пользовательский конвертер и переопределить метод декодирования, чтобы создать мою сущность, используя шаблон Builder.Он работает нормально:

public class MetaConverter extends TypeConverter implements SimpleValueConverter {

  public MetaConverter() {
    super(Meta.class);
  }

  @Override
  public Object decode(Class<?> aClass, Object o, MappedField mappedField) {
    BasicDBObject metaDBObject = (BasicDBObject) o;

    return new Meta.Builder(metaDBObject.getDate("created").toInstant()
        , metaDBObject.getDate("updated").toInstant())
        .setVersion(metaDBObject.getString("version"))
        .build();
  }

Однако, когда я пытаюсь создать новый документ.Сбой:

org.bson.codecs.configuration.CodecConfigurationException: Can't find a codec for class aaa.bbb.Meta

Если я уберу конвертер, все будет нормально работать в кодировке.Есть ли способ использовать только пользовательские функции декодирования и сохранить поддержку кодирования по умолчанию.

1 Ответ

0 голосов
/ 28 марта 2019

Вам нужно сообщить Morphia о вашем конвертере с mapper.getConverters().addConverter(new MetaConverter())

...