如何使用Mongo Java driver @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;
}
}
尝试添加一个空的构造函数,似乎 Morphia 需要这些,至少在我的项目中它有帮助。如果它已为您修复,请告诉我。
这应该与 POJO 支持一起工作。我刚刚做了一个 test case on github 并通过了。
我注意到两个问题:
implements Serializable
应该没有必要
您需要为这 3 个字段指定 getter,以便自动编解码器构建器能够正确拾取它们。
我正在尝试将 不可变 对象从 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;
}
}
尝试添加一个空的构造函数,似乎 Morphia 需要这些,至少在我的项目中它有帮助。如果它已为您修复,请告诉我。
这应该与 POJO 支持一起工作。我刚刚做了一个 test case on github 并通过了。
我注意到两个问题:
implements Serializable
应该没有必要您需要为这 3 个字段指定 getter,以便自动编解码器构建器能够正确拾取它们。