2014-06-25 53 views
1

我有一个MongoDB集合,其中的文档包含多个数组。我“米检索这些文件和它们的数据存储到的POJO无法将BasicDBList转换为数组(java)

在某些情况下,我可以这样做:

BasicDBList kws = (BasicDBList)obj.get(Constants.KEYWORDS_STR); 
if(!kws.isEmpty()) 
    tb.setKeywords(kws.toArray(new String[0])); 

不过,我已经一个数组多数民众赞成绊倒我,我还以为它包含了多头,但是。 toArray(new Long [0])抛出java.lang.ArrayStoreException。我想好了,由于某些原因,它们被存储为字符串,并尝试转换为一个字符串数组,并且仍然得到java.lang.ArrayStoreException。

如何判断BasicDBList认为它存储在哪个类中?

回答

0

由于BasicDBList extends ArrayList<Object>(注意 - 不使用泛型),所以不能保证kws将在其中包含同类型。您应该可以将new String[0]更改为new Object[0]并避免该例外。

有没有办法可以轻松地询问没有某种声明的数组:

if (instanceof){...} 
else if (instanceof) {...} 

你的数据模型应该映射出不够好,这种模式不是必需的,或者至少不够好,你知道有限的期望值。

+0

根据我的数据模型,它应该是Longs。看起来,JSON序列化程序在将Longs插入到MongoDB之前将它们转换为整数,因此它们被读出为整数。 – betseyb

+0

如果可以的话,驱动程序会尝试将其值填入32位,如果必要的话将其提升到64位。同样,它会反序列化,如果可以的话,试图将它装入53位。如果不能,它将返回一个Long的实例以避免失去精度。 – Keith

0

通过获取BasicDBList的迭代器并查看对象,我发现它保存了Integers(这很奇怪,因为它应该是Longs,但这是另一个问题的主题)。