我有一个使用spring-data-rest的项目,并且有一个只使用Spring Data的依赖项目。这两个项目都有spring数据库并使用@EnableJpaRepositories
来实现它们的存储库接口,但我只想在父项目中导出存储库。
这是我的问题:是否有一些方法可以将Spring Data REST配置为仅显示父项目中资源的其余端点,而无需使用@RepositoryRestResource(exported = false)
显式注释依赖项目中的每个存储库?
如果我只能通过@RepositoryRestResource
禁用它来执行此操作,更糟糕的是,没有其他具有不同用例的项目将能够为这些存储库启用REST端点,我的依赖项目将必须包含Spring数据REST仅适用于......
答案 0 :(得分:30)
回到这里,因为我正在寻找这个特定的设置。看起来现在已经实现了。在这种情况下,您需要设置 spring.data.rest.detection-strategy = annotated 以避免默认曝光。
所有application.properties选项:
# Exposes all public repository interfaces but considers @(Repository)RestResource\u2019s `exported flag.
spring.data.rest.detection-strategy=default
# Exposes all repositories independently of type visibility and annotations.
spring.data.rest.detection-strategy=all
# Only repositories annotated with @(Repository)RestResource are exposed, unless their exported flag is set to false.
spring.data.rest.detection-strategy=annotated
# Only public repositories annotated are exposed.
spring.data.rest.detection-strategy=visibility
答案 1 :(得分:15)
目前还没有针对您所寻找的内容进行全局切换。我已将this ticket提交给您,以便纳入下一个主要版本。
不确定它是否适合您,但除非明确注释,否则包私有存储库接口当前不会公开。如果您可以使所有这些库存储库包受到保护,可能比显式注释更有利。
答案 2 :(得分:2)
从 3.4 版开始使用:
import org.springframework.context.annotation.Configuration;
import org.springframework.data.rest.core.config.RepositoryRestConfiguration;
import org.springframework.data.rest.webmvc.config.RepositoryRestConfigurer;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
@Configuration
public class SpringRestConfiguration implements RepositoryRestConfigurer {
@Override
public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config, CorsRegistry cors) {
config.disableDefaultExposure();
}
}