Spring Data Rest和自定义存储库

4

是否可以使用自定义(spring data)存储库导出REST资源?

它是如何工作的?

我找不到任何示例。我也没有发现它是不可能的。

2个回答

3
我们使用了这两种方法,目前都运行良好:
  • 实现自定义控制器以利用您的自定义服务层
  • 实现自定义存储库工厂(例如扩展自RepositoryFactoryBeanSupport),构建自己的PersistentEntityInformation并手动处理自定义数据存储类型的CRUD操作。

更新:请查看文档中的此章节:向所有存储库添加自定义行为。思路是使用@EnableJpaRepositories(repositoryBaseClass = MyRepositoryImpl.class)替换默认的存储特定实现。

如果您想构建自定义存储SPI,那就是另一回事了。您可以使用spring-data-keyvalue并实现自己的KeyValueOperations bean,然后将其指定给@EnableMapRepositories。可以以spring-data-redis源代码作为实现示例。这是最简单的解决方案。
从头开始构建自己的完整存储库SPI需要更多的代码。我们参考了spring-data-elasticsearch的源代码。您可能需要实现以下内容:
  • 元数据: CustomEntityInformationCustomEntityMappingContextCustomPersistentEntityCustomPersistentProperty
  • 集成: @EnableCustomRepositoriesCustomRepositoriesRegistrarCustomRepositoryConfigurationExtensionCustomRepositoryFactoryCustomRepositoryFactoryBean
  • 实现: CustomRepository(基础接口)、CustomRepositoryImpl(默认实现)。

而且还需要一些额外的代码来支持Spring Data Rest,例如,搜索资源不会自动公开,因此我们需要手动构建搜索资源。然后您可能希望在其上添加查询支持等。

总之,答案是肯定的,可以通过实现自己的存储SPI来实现,但并不容易。首先应该寻找其他解决方案,包括:


请您详细说明或提供相关文档吗?尤其是第二个。 - afaulconbridge
增加了解释和相关链接。 - aux
顺便提一下,我们之前实现了这个解决方案,但现在看起来工作量太大了...)) 我们使用它与spring-data-rest一起实现了某种通过REST从另一个微服务请求的“远程资源”,但现在我们找到了更简单的解决方案-使用API网关、投影和资源处理器来定制服务之间的自定义链接。 - aux
非常感谢。我们正在研究是使用Spring-data-rest覆盖某种跨存储库,还是手动构建API。提供一个简短的起点列表会非常有帮助! - afaulconbridge

3

Spring data rest会检测并不导出存储库上的自定义实现。请参见此处的代码库和此处的原因。

如果您想公开自定义存储库实现,则需要使用自定义控制器。有关如何适当使用自定义控制器的文档将在Spring Data Rest 2.4中发布


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接