Spring Data Rest和自定义存储库

时间:2015-06-04 18:14:35

标签: spring-data-rest

是否可以使用自定义(弹簧数据)存储库导出REST资源?

它是如何运作的?

我找不到任何例子。我也没有发现任何不可能的说法。

2 个答案:

答案 0 :(得分:3)

Spring数据休息专门检测并不导出存储库上的自定义实现。请参阅the reference to the codebase herethe reason why here

如果要公开自定义存储库实现,则需要使用自定义控制器。有关如何正确使用自定义控制器的文档is slated for Spring Data Rest 2.4

答案 1 :(得分:2)

我们使用了这两种方法,到目前为止都工作正常:

  • 实施自定义控制器以利用您的自定义服务图层
  • 实施自定义存储库工厂(例如从RepositoryFactoryBeanSupport扩展),构建您自己的PersistentEntityInformation并手动处理您的自定义数据存储类型的CRUD操作。

更新:查看文档的这一章:Adding custom behavior to all repositories。我们的想法是使用@EnableJpaRepositories(repositoryBaseClass = MyRepositoryImpl.class)替换默认的特定于存储的实现。

如果您想构建一个自定义存储SPI ,这是一个不同的故事。您可以使用spring-data-keyvalue并实现自己为KeyValueOperations指定的@EnableMapRepositories bean。查看spring-data-redis源代码作为该实现的示例。这是最简单的解决方案。

从头开始为自己的存储库构建完整的SPI需要更多代码。我们关注了spring-data-elasticsearch的资料。您可能需要实现:

  • 元数据: CustomEntityInformationCustomEntityMappingContextCustomPersistentEntityCustomPersistentProperty
  • 整合: @EnableCustomRepositoriesCustomRepositoriesRegistrarCustomRepositoryConfigurationExtensionCustomRepositoryFactoryCustomRepositoryFactoryBean
  • 实施: CustomRepository(基本界面),CustomRepositoryImpl(默认实施)。

仍然需要一些额外的代码来支持spring-data-rest,例如,搜索资源不会自动公开,因此我们手动构建搜索资源。然后,您可能希望在顶部添加查询支持等。

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