spring 数据 rest 存储库导出的每个 class 配置
Per-class configuration of spring data rest repository export
我们有一个基于 Spring Data REST 的 REST API 应用程序。我们有许多类型的数据公开为 spring 个标有 @RepositoryRestResource
的数据存储库。我们希望精确控制在运行时公开哪些数据类型,因为我们将有几个安装要求略有不同。
我们如何在运行时对 Spring Data REST 公开哪些存储库实现细粒度控制?
我们幼稚的尝试是将 @RepositoryRestResource
中的 export
参数与表达式一起使用,但我们看不到如何实现它 - 表达式的计算结果为字符串,而不是布尔值.
@RepositoryRestResource(exported = "${app.exportStudy}")
public interface StudyRepository<Study> extends MongoRepository<Study,String> {
}
解决此问题的一种方法是替换存储库检测策略。
首先,使用一个对象来存储您的配置:
@Component
@ConfigurationProperties("app.repository")
@Data
public class AppRepositoryConfig {
private boolean exportStudy = true;
private boolean exportSample = true;
...
}
其次,修改库存 RepositoryDetectionStrategy 的行为以考虑您的配置:
@Configuration
@RequiredArgsConstructor
public class AppRepositoryDetectionStrategyConfig extends RepositoryRestConfigurerAdapter {
@NonNull private AppRepositoryConfig appRepositoryConfig;
@Override
public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) {
RepositoryDetectionStrategy rds = config.getRepositoryDetectionStrategy();
config.setRepositoryDetectionStrategy(
repositoryDetectionStrategy(rds)
);
}
private RepositoryDetectionStrategy repositoryDetectionStrategy(
RepositoryDetectionStrategy repositoryDetectionStrategy) {
RepositoryDetectionStrategy rds = metadata -> {
boolean defaultExportSetting = repositoryDetectionStrategy.isExported(metadata);
if (metadata.getDomainType().equals(Study.class)) {
return (appRepositoryConfig.isExportStudy()) ? defaultExportSetting : false;
}
...
return defaultExportSetting;
};
return rds;
}
我们有一个基于 Spring Data REST 的 REST API 应用程序。我们有许多类型的数据公开为 spring 个标有 @RepositoryRestResource
的数据存储库。我们希望精确控制在运行时公开哪些数据类型,因为我们将有几个安装要求略有不同。
我们如何在运行时对 Spring Data REST 公开哪些存储库实现细粒度控制?
我们幼稚的尝试是将 @RepositoryRestResource
中的 export
参数与表达式一起使用,但我们看不到如何实现它 - 表达式的计算结果为字符串,而不是布尔值.
@RepositoryRestResource(exported = "${app.exportStudy}")
public interface StudyRepository<Study> extends MongoRepository<Study,String> {
}
解决此问题的一种方法是替换存储库检测策略。
首先,使用一个对象来存储您的配置:
@Component
@ConfigurationProperties("app.repository")
@Data
public class AppRepositoryConfig {
private boolean exportStudy = true;
private boolean exportSample = true;
...
}
其次,修改库存 RepositoryDetectionStrategy 的行为以考虑您的配置:
@Configuration
@RequiredArgsConstructor
public class AppRepositoryDetectionStrategyConfig extends RepositoryRestConfigurerAdapter {
@NonNull private AppRepositoryConfig appRepositoryConfig;
@Override
public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) {
RepositoryDetectionStrategy rds = config.getRepositoryDetectionStrategy();
config.setRepositoryDetectionStrategy(
repositoryDetectionStrategy(rds)
);
}
private RepositoryDetectionStrategy repositoryDetectionStrategy(
RepositoryDetectionStrategy repositoryDetectionStrategy) {
RepositoryDetectionStrategy rds = metadata -> {
boolean defaultExportSetting = repositoryDetectionStrategy.isExported(metadata);
if (metadata.getDomainType().equals(Study.class)) {
return (appRepositoryConfig.isExportStudy()) ? defaultExportSetting : false;
}
...
return defaultExportSetting;
};
return rds;
}