如何使用 Spring Boot 存储库配置公开超类的 Id

Posted

技术标签:

【中文标题】如何使用 Spring Boot 存储库配置公开超类的 Id【英文标题】:How do I expose Ids of a superclass using spring boot repository config 【发布时间】:2016-05-31 07:58:43 【问题描述】:

我有一个名为 RepositoryConfig.java 的类,它扩展了 RepositoryRestConfigurerAdapter。该类有一个方法

public void configureRepositoryRestConfiguration(RepositoryRestConfiguration conf)
    conf.exposeIdsFor(SuperClass.class);

以前的 Spring 版本会在 JSON 中为所有扩展超类的类公开 id。现在升级到最新的 Spring Boot 1.3.2 后,扩展超类的类不会公开 id。是否有一种新方法可以为每个扩展超类的类公开 id?或者我会有一行代码为每个扩展超类的类公开 id?

【问题讨论】:

***.com/a/24938519/794088 可能有帮助 @petey 我有许多类扩展了我想为其公开 id 的超类。我想知道是否有一种方法不需要为每个子类编写一行代码 【参考方案1】:

您可以通过EntityManager获取所有实体,并根据您的需要进行过滤:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.rest.core.config.RepositoryRestConfiguration;
import org.springframework.data.rest.webmvc.config.RepositoryRestConfigurerAdapter;

import javax.persistence.EntityManager;
import javax.persistence.metamodel.Type;

@Configuration
public class RepositoryConfig extends RepositoryRestConfigurerAdapter 

    @Autowired
    private EntityManager entityManager;

    @Override
    public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) 
        config.exposeIdsFor(
                entityManager.getMetamodel().getEntities().stream()
                .map(Type::getJavaType)
                .filter(SuperClass.class::isAssignableFrom)
                .toArray(Class[]::new));
    

查看此answer 以查看其他选项。

【讨论】:

以上是关于如何使用 Spring Boot 存储库配置公开超类的 Id的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法使用 Spring Boot 自动配置注册存储库基类?

如何禁用 Spring Data REST 存储库的默认公开?

如何使用 java 将 spring 标记库公开给 Freemaker 配置并处理 Freemarker 模板类?

如何避免使用 Spring Boot 由另一个库配置外部库

如何使用Spring Boot从不同的包中自动装配存储库接口?

如何在 Spring Boot 应用程序的同一个域类上同时使用 Spring Data JPA 和 Spring Data Elasticsearch 存储库?