我收到一个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]);
}
它失败的可能原因是什么?
答案 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]};
。否则我真的不明白你怎么能编译它。