在spring boot java项目中如何将不同数据类型的属性从mongo DB映射到java类?

问题描述 投票:0回答:1

嗨,我有一个mongoDB文档部分,其中包含如图所示的columns属性(第1格式)

   "columns" : [
                    [
                        {
                            "itemId" : ObjectId("5b863b50083ae5eb1e678d75"), 
                            "type" : "field"
                        }
                    ], 
                    [
                        {
                            "itemId" : ObjectId("5b8d4404af0963f54e262f46"), 
                            "type" : "field"
                        }
                    ], 
                    [

                    ], 
                    [

                    ]
                ]


which is of the type Array of Array of Objects 

However at some places it is also stored in this format as well . (2nd format)


          "columns" : [
            {
                "0" : {
                    "itemId" : "5b863b50083ae5eb1e678d75", 
                    "type" : "field"
                }
            }, 
            {
                "0" : {
                    "itemId" : "5b8d4404af0963f54e262f46", 
                    "type" : "field"
                }
            }, 
            {

            }, 
            {

            }
        ]

作为对象的对象数组

现在我有dao类someObject来存储最内层的对象

public class SomeObject{

private ObjectId itemId;
    private String type;
    public ObjectId getItemId() {
        return itemId;
    }
    public void setItemId(ObjectId itemId) {
        this.itemId = itemId;
    }
    public String getType() {
        return type;
    }
    public void setType(String type) {
        this.type = type;
    }

}

这里是Dao类

public class Section{

private List<List<SomeObject>> columns;

    public List<List<someObject>> getColumns() {
        return columns;
    }

    public void setColumns(List<List<SomeObject>> columns) {
        this.columns = columns;
    }
}

对于第一种格式,部分类如何工作正常,因为我将类型作为List

但因为它有不同之处,因此打破了第二种格式

我也尝试过使用这个课程

Public class Section {

private List<Object> columns;

}

这个mapps第二种格式,但打破第一种格式我得到以下错误

 "exceptionDetails": "Cannot convert [Document{{itemId=5877f2345449aef957e1d8ec, type=field}}] of type class java.util.ArrayList into an instance of class java.lang.Object! Implement a custom Converter<class java.util.ArrayList, class java.lang.Object> and register it with the CustomConversions.

请任何人可以建议我如何创建dao类,以便它可以映射两种格式?我需要实现自定义映射器吗?如果是的话怎么样?

java arrays mongodb objectmapper
1个回答
1
投票

在我看来你有点不明白什么是DAO类。你有什么是JavaBeans

关于你的问题,正如你注意到并且在例外情况中报告你的文件是ArrayList,为什么不把它读作ArrayList然后将其设置为Section字段?但如果此选项不适合您,您可以实现Custom Converter,这也会在异常详细信息中向您报告。

© www.soinside.com 2019 - 2024. All rights reserved.