Как использовать аннотацию @BsonCreator для Java-драйвера Mongo?

Я пытаюсь сопоставить неизменяемый объект из MongoDB с моим Java POJO, и все время получаю следующую ошибку:

org.springframework.web.util.NestedServletException: 
Request processing failed; 
nested exception is java.lang.RuntimeException: 
org.mongodb.morphia.mapping.MappingException: 
No usable constructor for com.example.model.Item

Кажется, что при использовании неизменяемых объектов мне нужно аннотировать с помощью @BsonCreator, однако это не работает, и я считаю, что это может быть потому, что использование этой аннотации требует от меня какой-то настройки org.bson.codecs.pojo.Conventions#ANNOTATION_CONVENTION. Может быть, я слепой, но я не могу нигде найти примеры того, как это настроить. Любая помощь будет принята с благодарностью. Вот мой аннотированный POJO:

@Value /* Lombok auto generates getters */
@Builder /* Lombok auto generates builder method */
public class Item implements Serializable {
    private final @NotNull AnEnum type;
    private final int refId;
    private final int quantity;

    @BsonCreator
    public Item(@BsonProperty("type") AnEnum type,
                @BsonProperty("refId") int refId,
                @BsonProperty("quantity") int quantity) {
        this.type = type;
        this.refId = refId;
        this.quantity = quantity;
    }
}

person nofunatall    schedule 28.02.2018    source источник
comment
Вы используете Morphia или просто драйвер Java? @BsonCreator является частью драйвера, но вы добавили ключевое слово [morphia].   -  person Nic Cottrell    schedule 04.06.2018


Ответы (2)



попробуйте добавить пустой конструктор, похоже, что Морфии они нужны, по крайней мере, в моем проекте это помогает. Пожалуйста, дайте мне знать, исправил ли он это для вас.

person rhewid    schedule 18.03.2018
comment
Добавление конструктора по умолчанию определенно работает и является полезным обходным путем, однако кажется беспорядочным. Кажется, что разработчики предоставили @BsonCreator специально для этой цели, однако документация и примеры, похоже, отсутствуют. - person nofunatall; 20.03.2018