2013-12-18 81 views
4

我的项目正在使用Spring数据mongodb。直到我编辑了其中包含文档数组的字段的文档之一时,我才没有出现错误。它之前工作正常,但现在我不断得到下面的错误。Spring Mongodb-无法实例化bean类[java.util.List]:指定的类是一个接口

我更新的字段是项目POJO类中的impapps。我不知道如何清除这个错误尝试了不同的东西,但没有解决。

SEVERE: Servlet.service() for servlet [appServlet] in context with path [/mongodproject] threw exception [Request processing failed; nested exception is org.springframework.data.mapping.model.MappingInstantiationException: Could not instantiate bean class [java.util.List]: Specified class is an interface] with root cause 
org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [java.util.List]: Specified class is an interface 
    at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:101) 
    at org.springframework.data.convert.ReflectionEntityInstantiator.createInstance(ReflectionEntityInstantiator.java:60) 
    at org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:232) 
    at org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:212) 
    at org.springframework.data.mongodb.core.convert.MappingMongoConverter.readValue(MappingMongoConverter.java:1008) 
    at org.springframework.data.mongodb.core.convert.MappingMongoConverter.access$100(MappingMongoConverter.java:75) 
    at org.springframework.data.mongodb.core.convert.MappingMongoConverter$MongoDbPropertyValueProvider.getPropertyValue(MappingMongoConverter.java:957) 
    at org.springframework.data.mongodb.core.convert.MappingMongoConverter.getValueInternal(MappingMongoConverter.java:713) 

这是我的POJO和Spring Repository类。

项目POJO类

@Document(collection="releases") 
public class Project { 
@Id 
private String id; 
...... 
@Field("impapps") 
private List<ImpactedApplications> impapps=new ArrayList<ImpactedApplications>(); 
    .....getters/setters 
} 

ImpactedApplication POJO类:

public class ImpactedApplications { 

@Field("appid") 
private String appId; 
..... 
@Field("repository") 
private List<ScriptsRepo> rep=new ArrayList<ScriptsRepo>(); 
@Field("artifacts") 
private List<Artifacts> artifacts=new ArrayList<Artifacts>(); 
    //getter and setters 

}

工件POJO类

public class Artifacts { 

    @Field("artifacttype") 
    private String artifactType; 
    @Field("documentlink") 
    private String documentLink; 
    @Field("arttestphase") 
    private String artTestPhase; 
    @Field("artifactname") 
    private ArtifactsEnums artifactsNames; 
    @Field("startdate") 
    private String startDate; 
    @Field("enddate") 
    private String endDate; 
    @Field("peerrev") 
    private boolean peerReview; 
    @Field("busrev") 
    private boolean busReview; 
    @Field("na") 
    private boolean na; 

春库类

public interface ProjectRepository extends Repository<Project, String> { 

Project findById(String id); 
List<Project> findByYearAndReleaseMonthNoOrderByProjectNameDesc(String year,String month, Sort sort); 
Project findByYearAndReleaseMonthNoAndId(String year, String month,String id); 

每当我调用上面的方法我不断收到异常。

以下是我目前正在查看的文档。

enter image description here

+1

这些文档看起来像是在读什么?你可以检查一下,'impapps','repository'和'artifacts'的值是MongoDB中的数组吗?如果是这样,'read(...)'方法应该运行到'typeToUse.isCollectionLike()&& dbo instanceof BasicDBList'子句中,并正确地为该属性创建一个集合。我假设你宁愿找到一些*不是*一个数组,因此实体分辨率就开始了。PS:你介意正确格式化代码示例吗?使帖子阅读起来更好,可能会吸引更多人回答。 –

+0

@OliverGierke谢谢你的回复。我已经格式化了我的问题。我附上了'文档'图片。 'impappa'被创建为一个数组,'artifacts'被创建为数组,'repository'当前被创建为空数组。 – VBJ

+0

现在,当我看到它关闭..我看到'impapps'存储为一个文档,而不是一个文件数组..我认为有我的代码中的问题。当我编辑'impapps'看起来它不是作为一个数组存储,而是作为一个文档。 – VBJ

回答

4

impapps场在文档中不是一个数组而是一个嵌套的文件。所以如果您将List<ImpactedApplications>更改为简单的ImpactedApplications,则应该可以很好地读取。

0

我已经得到了同样的异常:

试图声明自己场上像这样:

@Field("impapps") 
ArrayList<ImpactedApplications> impapps = new ArrayList<ImpactedApplications>(); 

我不喜欢这样做,但它为我工作。

编辑:

我的问题是由于合并过程中被放松的操作。 它将数组(在我的类中声明为列表<>)转换为对象 ,然后反射不起作用,因为spring期待列表。

相关问题