Java Spring数据Mongodb错误转换文档

Java Spring数据Mongodb错误转换文档,java,spring-boot,spring-data,spring-data-mongodb,Java,Spring Boot,Spring Data,Spring Data Mongodb,我有一个文档结构,它有一些泛型类。写信给mongodb,一切都很好。但当从mongodb读取文档时,spring数据错误地将文档转换为对象。它将子文档转换为另一种类型。这两种类型(实际的子集合类型和错误转换的类型)都是从同一个抽象类继承的 模型类:(getter setter由lombok生成) 然后,spring data mongo mapping converter创建候选者、经验、责任、值列为经验列表,但它应该是责任列表 您可以在中找到演示项目以及有关此问题的更多信息。有人能指出哪里不对

我有一个文档结构,它有一些泛型类。写信给mongodb,一切都很好。但当从mongodb读取文档时,spring数据错误地将文档转换为对象。它将子文档转换为另一种类型。这两种类型(实际的子集合类型和错误转换的类型)都是从同一个抽象类继承的

模型类:(getter setter由lombok生成)

然后,spring data mongo mapping converter创建候选者、经验、责任、值列为经验列表,但它应该是责任列表

您可以在中找到演示项目以及有关此问题的更多信息。有人能指出哪里不对吗?否则,我必须编写自己的转换器(演示版有一个)

如果有什么不清楚的事情,你可以问


谢谢。

我在spring data mongo中打开了一个问题。很明显我抓到了一只虫子!谢谢大家

寻求调试帮助的问题(“为什么此代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现这些问题所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:当您保存文档时,是否能够在mongo中看到
\u class
元素?这是问题所附的标准关闭原因文本。粗体部分旨在提请您注意这样一个事实,即链接到“外部”代码库而不是实际上将问题“缩小”到“特定”区域并不足以在此处提出问题。你至少应该尝试一个“最小的例子”来演示和再现你遇到的问题。这样的列表总是适合这里的问题空间,并且在编写过程中几乎总是为您回答问题。嗨@DarshanMehta,对于实际文档,我可以看到_class元素。对于有问题的子文档,我可以再次看到_class元素。写入转换器工作正常,但读取错误。根据,映射器应该能够映射到具有
\u class
属性的正确类。然而,如果这个类不能被实例化,那么它将返回到默认类型,我相信这就是本例中发生的情况。
@Data
public abstract class CandidateInfo {

    private String _id;
}

@Data
public class CandidateInfoContainer<E extends CandidateInfo> {

    private String _id;

    private int commentCount = 0;

    @Valid
    private List<E> values = new ArrayList<>();
}

@Data
public class Responsibility extends CandidateInfo {

    @NotNull
    private String responsibilityId;

    @ReadOnlyProperty
    private String responsibilityText;
}

@Data
public class Experience extends CandidateInfo {

    @Valid
    private CandidateInfoContainer<Responsibility> responsibilities;
}

@Document
@JsonInclude(JsonInclude.Include.NON_NULL)
@Data
public class Candidate {

    private String _id;

    @Valid
    private CandidateInfoContainer<Experience> experiences;
}
@Repository
public interface CandidateRepository extends MongoRepository<Candidate,String>{
}
@Autowired
private CandidateRepository candidateRepository;

Candidate candidate = candidateRepository.findOne("documentId");