Невозможно сериализовать целочисленные данные mongo для перечисления в документе объекта

#java #mongodb

Вопрос:

Я пытаюсь извлечь документы из базы данных Mongo. Документы получены хорошо, когда гендерный признак не включен. Но когда он включен, возникает ошибка.

Вот моя функция для извлечения личных документов из Монго

 private List<Person> getPersons()
{
    // Query to get person list

    // Loop through person list
    for (Person person : personList) {
        // Some condition checking
        filteredPersonList.add(person);
    }
    return filteredPersonList;
}
 

Вот мой личный класс

 public class Person {
  @BsonProperty("firstName")
  @JSONField("firstName")
  public String FirstName

  @BsonProperty("lastName")
  @JSONField("lastName")
  public String LastName

  @BsonProperty("gender")
  @JSONField("gender")
  public Gender Gender

  @BsonProperty("isMarried")
  @JSONField("isMarried")
  public Boolean IsMarried
}
 

Вот гендерное перечисление для свойства Gender

 @JSONType(serializeEnumAsJavaBean = true)
public enum Gender {
  Male(0),
  Female(1),
  ;
  private final int type;

  Gender (int type) {
    this.type = type;
  }

  public int getType() {
    return type;
  }
}
 

Это ошибка, которую я получаю

  org.bson.codecs.configuration.CodecConfigurationException: Failed to decode 'Person'. Decoding 'gender' errored with: readString can only be called when CurrentBSONType is STRING, not when CurrentBSONType is INT32.A custom Codec or PojoCodec may need to be explicitly configured and registered to handle this type. 
at org.bson.codecs.pojo.PojoCodecImpl.decodePropertyModel(PojoCodecImpl.java:224)
at org.bson.codecs.pojo.PojoCodecImpl.decodeProperties(PojoCodecImpl.java:197)
at org.bson.codecs.pojo.PojoCodecImpl.decode(PojoCodecImpl.java:121)
at org.bson.codecs.pojo.PojoCodecImpl.decode(PojoCodecImpl.java:125)
at org.bson.codecs.pojo.LazyPojoCodec.decode(LazyPojoCodec.java:57)
at org.bson.codecs.DecoderContext.decodeWithChildContext(DecoderContext.java:96)
at org.bson.codecs.pojo.PojoCodecImpl.decodePropertyModel(PojoCodecImpl.java:218)
    ... 58 more
 

В базе данных Mongo тип свойства gender-INT32.

Ответ №1:

Вы должны добавить пользовательский кодек в соответствии с вашей реализацией mongodb.

Видишь это

http://mongodb.github.io/mongo-java-driver/4.3/bson/codecs/