如何使用 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 Data JPA 和 Spring Data Elasticsearch 存储库?