繁体   English   中英

如何使用 Mongo Java 驱动程序 @BsonCreator 注释?

[英]How to use Mongo Java driver @BsonCreator annotation?

我正在尝试将一个不可变对象从 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;
    }
}

这绝对应该与 POJO 支持一起使用。 我刚刚在 github 上做了一个测试用例,它通过了。

我注意到两个问题:

  1. 不需要implements Serializable

  2. 您需要为这 3 个字段指定 getter,以便自动编解码器构建器正确选择它们。

尝试添加一个空的构造函数,似乎 Morphia 需要那些,至少在我的项目中它有帮助。 请让我知道它是否为您修复。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM