首页 文章

Spring Mongodb-无法实例化bean类[java.util.List]:指定的类是一个接口

提问于
浏览
4

我的项目使用的是Spring数据mongodb . 在我对其中一个包含文档数组的字段的文档进行编辑之前,我没有遇到以下错误 . 它之前工作正常,但现在我一直得到以下错误 .

我更新的字段在Projects 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类 .

Project POJO Class

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

ImpactedApplication POJO Class:

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

}

Artifacts POJO Class

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;

Spring Repository classes

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);

每当我调用上述方法时,我都会继续获得异常 .

Below is how my document is looking currently.

enter image description here

2 回答

  • 4

    文档中的 impapps 字段不是数组,而是嵌套文档 . 因此,如果您将 List<ImpactedApplications> 更改为简单的 ImpactedApplications ,这应该是正常的 .

  • 0

    我有同样的例外:

    Try to declare your field like this :

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

    我不喜欢这样做,但它对我有用 .

    edit:

    我的问题是由于聚合期间的展开操作 . 它将数组(在我的类中声明为List <>)转换为对象,然后反射不起作用,因为spring期待列表 .

相关问题