java.lang.IllegalArgumentException:无效的ObjectId [0]

时间:2013-05-27 04:54:16

标签: java bson

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

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

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

3 个答案:

答案 0 :(得分:4)

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

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

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

ObjectId obj = ObjectId.get()

这将创建具有自动生成值的ObjectId。

答案 1 :(得分:1)

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

ObjectId obj = new ObjectId(sarray[0]);

答案 2 :(得分:0)

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