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

时间:2018-02-28 02:23:05

标签: java mongodb spring-boot morphia mongo-java-driver

我正在尝试将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;
    }
}

2 个答案:

答案 0 :(得分:1)

这绝对适用于POJO支持。我刚刚通过了test case on github

我注意到两个问题:

  1. implements Serializable不一定是必要的

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

答案 1 :(得分:0)

尝试添加一个空的构造函数,似乎Morphia需要那些,至少在我的项目中它有帮助。如果它为你修好了,请告诉我。