Spring Data Rest(SDR)错误:PersistentEntity不能为null

Rob*_*ich 7 spring-data-rest

我正在努力通过SDR公开我的Spring数据存储库.当我导航到我的休息URL(http:// localhost:8080/trxes)时,我收到一个错误:{"cause":null,"message":"PersistentEntity不能为空!"}

仔细检查一下spring数据源,我看到getRepositoryFactoryInfoFor()方法返回空的存储库信息,即

private RepositoryFactoryInformation<Object, Serializable> getRepositoryFactoryInfoFor(Class<?> domainClass) {

    Assert.notNull(domainClass, "Domain class must not be null!");

    RepositoryFactoryInformation<Object, Serializable> repositoryInfo = repositoryFactoryInfos.get(ClassUtils
            .getUserClass(domainClass));
    return repositoryInfo == null ? EMPTY_REPOSITORY_FACTORY_INFO : repositoryInfo;
}
Run Code Online (Sandbox Code Playgroud)

我的问题的可能原因是我的持久化实体继承自单个基类,我使用单表策略如下:

数据库中有一个TRX表,具有匹配的Trx类.VariableIncome,VariableExpense,FixedIncome和FixedExpense都继承自Trx并持久保存到TRX表.

    @Entity
    @Table(name = "TRX")
    @Inheritance(strategy = InheritanceType.SINGLE_TABLE)
    @DiscriminatorColumn(name = "TRX_TYPE", discriminatorType = DiscriminatorType.STRING)
    abstract public class Trx extends AbstractPersistable<Long> {
Run Code Online (Sandbox Code Playgroud)

所有子类看起来类似于下面显示的VariableIncome:

    @Entity
    @DiscriminatorValue("VARIABLE_INCOME")
    public class VariableIncome extends Trx {
Run Code Online (Sandbox Code Playgroud)

我的存储库设置是(此类没有注释):

public interface TrxRepository extends CrudRepository<Trx, Long> {
Run Code Online (Sandbox Code Playgroud)

我运行描述的设置:

@SpringBootApplication
public class RestApplication {

    public static void main(String[] args) {
        SpringApplication.run(RestApplication.class, args);
    }

}
Run Code Online (Sandbox Code Playgroud)

我想我正在寻找的是,是否有一种方法可以告诉SDR(当它试图推断出我的持久化类是什么时)所有子类应该映射回Trx?

bvu*_*laj 2

这是“REST”方面的问题,而“DATA”方面的问题则较少。

您需要使用 Jackson 注释来获取类型信息。

@JsonTypeInfo(use=JsonTypeInfo.Id.CLASS, include = As.PROPERTY, property = "@class")
Run Code Online (Sandbox Code Playgroud)

您可以在此处找到更多信息,因为有几种方法可以根据您的用例和偏好来构建它。