Mongodb find()返回整数列表将导致NoSuchMethodException(无默认构造函数)

Mongodb find()返回整数列表将导致NoSuchMethodException(无默认构造函数),mongodb,spring-data,Mongodb,Spring Data,我试图使用spring data mongo从mongo集合查询整数列表,但在生成结果时引发异常,因为Integer没有默认构造函数: Query query = Query.query(Criteria.where("acceptsEmails").is(true)); query.fields().include("userId"); return mongoTemplate.find(query, Integer.class); 问题是生成以下异常是因为它似乎试图使用默认构造函数(显然不

我试图使用spring data mongo从mongo集合查询整数列表,但在生成结果时引发异常,因为Integer没有默认构造函数:

Query query = Query.query(Criteria.where("acceptsEmails").is(true));
query.fields().include("userId");
return mongoTemplate.find(query, Integer.class);
问题是生成以下异常是因为它似乎试图使用默认构造函数(显然不存在)实例化Integer

org.springframework.data.mapping.model.mappingInstanceException:无法实例化bean类[java.lang.Integer]:未找到默认构造函数;嵌套异常为java.lang.NoSuchMethodException:java.lang.Integer。()
在org.springframework.data.mapping.model.BeanWrapper.(BeanWrapper.java:105)~[spring-data-commons-core-1.2.0.RELEASE.jar:na]
在org.springframework.data.mapping.model.BeanWrapper.create(BeanWrapper.java:73)~[spring-data-commons-core-1.2.0.RELEASE.jar:na]
在org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:239)~[spring-data-mongodb-1.0.0.RELEASE.jar:na]
在org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:187)~[spring-data-mongodb-1.0.0.RELEASE.jar:na]
在org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:151)~[spring-data-mongodb-1.0.0.RELEASE.jar:na]
在org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:73)~[spring-data-mongodb-1.0.0.RELEASE.jar:na]
在org.springframework.data.mongodb.core.MongoTemplate$ReadDbObjectCallback.doWith(MongoTemplate.java:1693)~[spring-data-mongodb-1.0.0.RELEASE.jar:na]
在org.springframework.data.mongodb.core.MongoTemplate.executeFindMultiInternal(MongoTemplate.java:1444)~[spring-data-mongodb-1.0.0.RELEASE.jar:na]
在org.springframework.data.mongodb.core.MongoTemplate.doFind(MongoTemplate.java:1259)~[spring-data-mongodb-1.0.0.RELEASE.jar:na]
在org.springframework.data.mongodb.core.MongoTemplate.doFind(MongoTemplate.java:1248)~[spring-data-mongodb-1.0.0.RELEASE.jar:na]
在org.springframework.data.mongodb.core.MongoTemplate.find(MongoTemplate.java:471)~[spring-data-mongodb-1.0.0.RELEASE.jar:na]
在
原因:org.springframework.beans.BeanInstantiationException:无法实例化bean类[java.lang.Integer]:未找到默认构造函数;嵌套异常为java.lang.NoSuchMethodException:java.lang.Integer。()
在org.springframework.beans.BeanUtils.instanceClass(BeanUtils.java:107)~[spring-beans-3.1.1.RELEASE.jar:3.1.1.RELEASE]
在org.springframework.data.mapping.model.BeanWrapper.(BeanWrapper.java:102)~[spring-data-commons-core-1.2.0.RELEASE.jar:na]
... 省略了74个公共框架
原因:java.lang.NoSuchMethodException:java.lang.Integer。()
在java.lang.Class.getConstructor0(Class.java:2706)~[na:1.6.0_24]
在java.lang.Class.getDeclaredConstructor(Class.java:1985)~[na:1.6.0\u24]
在org.springframework.beans.BeanUtils.instanceClass(BeanUtils.java:104)~[spring-beans-3.1.1.RELEASE.jar:3.1.1.RELEASE]
... 省略75个公共框架

有没有办法得到一个返回的整数列表?这是一个非常大的整数列表,因此我不希望使用中间格式,如字符串,然后我必须迭代并将其转换为整数。

可能您可以注册一个自定义转换器,从
DbObject
(您实际从驱动程序获得的数据类型)到
Integer

也许像这样的事情会奏效:

public class UserIdReadConverter implements Converter<DBObject, Integer> {
    public Integer convert(DBObject source) {
        return Integer.parseInt((String) source.get("userId"));
    }
}
公共类UserIdReadConverter实现转换器{
公共整数转换(DBObject源){
返回Integer.parseInt((String)source.get(“userId”);
}
}
不幸的是,您仍然需要将结果值转换为整数。您可以在文档中看到此解决方案是否是一个有用的解决方案

再见 卡洛

public class UserIdReadConverter implements Converter<DBObject, Integer> {
    public Integer convert(DBObject source) {
        return Integer.parseInt((String) source.get("userId"));
    }
}