2

当我尝试在我的一个类中执行类似于下面的代码时,我得到一个 java.lang.IllegalArgumentException: invalid ObjectId [0]。

    String s = "0_abc";
--------
private ObjectId obj; [Instance variable]
public NewClass(String s){
    String[] sarray = s.split("_");
    obj = new ObjectId(sarray[0]);
}

它失败的可能原因是什么?

4

3 回答 3

4

我假设 ObjectId 类是 (org.bson.types.ObjectId) 并且它在 MongoDB Java 驱动程序中使用。此异常意味着“0”不能作为 ObjectId 构造的值传递。

并非每个字符串都是正确的 ObjectId 值。当 ObjectId 用给定的字符串初始化时,验证就完成了。例如 ObjectId 要求字符串有 24 个字符。还有更多约束,您可以在 GitHub repo中的 isValid() 方法中找到完整的验证源代码。

如果要创建具有正确值的 ObjectId 对象,可以使用可用的工厂方法创建它,如下所示:

ObjectId obj = ObjectId.get()

这将使用自动生成的值创建 ObjectId。

于 2014-05-06T19:29:14.173 回答
1

我的事情ObjectId obj = new ObjectId{sarray[0]};应该是:

ObjectId obj = new ObjectId(sarray[0]);
于 2013-05-27T04:57:59.887 回答
0

不幸的是,您还没有发送堆栈跟踪,但我认为异常是从您的类的构造函数中抛出的ObjectId,它不允许0作为参数发送。我也认为你想说new ObjectId(sarray[0])而不是new ObjectId{sarray[0]};。否则我真的不明白你怎么能编译这个。

于 2013-05-27T04:59:24.103 回答