当前位置: 首页 > 知识库问答 >
问题:

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

秦景福
2023-03-14

我试图将一个不可变的对象从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。布森。编解码器。波乔。约定#注释_约定。也许我是瞎子,但我似乎找不到任何关于如何配置的例子。任何帮助都将不胜感激。以下是我的注释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个答案

鲜于裕
2023-03-14

尝试添加一个空的构造函数,似乎Morphia需要这些,至少在我的项目中是这样。请让我知道它是否为你修好了。

宫修贤
2023-03-14

这肯定会在POJO支持下起作用。我刚刚在github上做了一个测试用例,通过了。

我注意到两个问题:

>

  • 实现Serializable不应该是必要的

    您需要为这三个字段指定getter,以便自动编解码器生成器正确地提取它们。

  •  类似资料:
    • 我正在尝试使用MongoJava驱动程序3.6的新更改流功能,但我卡住了。这是我的错误: 下面是我启动changeStream的方法: < code>Person只是一个POJO。

    • 在QMetry中,我试图在一个测试用例中从appiumDriver切换到androidDriver。这是由于函数<code>驱动程序之一而产生的。IsKeyboardShowed()显示为应用程序未定义。因此需要将其更改为androidDriver并使用此功能。 当前在Qmetry项目中,对于appiumDriver,功能在application.properties文件中设置为: 现在想切换到a

    • 在Eclipse BIRT数据资源管理器中为查询生成器添加JDBC数据库连接: 选择“查询生成器的JDBC数据库连接” 就这样。我可以使用此数据源来使用数据集。 下一个。 我希望使用更灵活的“JDBC数据源”,而不是以前成功使用的“查询生成器的JDBC数据库连接”。哦,我看到MySQL没有驱动程序类-Derby和Sample只有两个默认条目。 似乎JDBC驱动程序的有效注册没有添加(或注册?)司机

    • 我是卡桑德拉和莫文的新手。我试图在eclipse中编写一个简单的java程序,它使用cassandra java驱动程序连接到我设置的cassandra节点。我找到了这个存储库https://github.com/datastax/java-driver但我不知道该怎么处理它。有谁能给我一步一步的说明来获取驱动程序并创建一个使用驱动程序的简单eclipse项目吗。

    • 我试图使用@FindBy初始化所有页面元素。我知道@FindBy可以用来初始化单个webelement,但它可以用来初始化webelement列表吗?我正在尝试合并司机。findElements(By.xpath()(它将返回webelements的列表)以@FindBy的形式出现。我该怎么做?

    • 我将非常感谢您在这里提供的任何建议。我试图通过使用TestNG和实现ITestListerner接口来使用POM框架中的driver对象。 下面是我抓取截图的方法 请您建议一种方法,下面的方法不应该启动一个新的浏览器会话,而应该将焦点保留在第一个浏览器实例上&同时捕获一个屏幕截图