是否可以使用自定义(弹簧数据)存储库导出REST资源?
它是如何运作的?
我找不到任何例子。我也没有发现任何不可能的说法。
答案 0 :(得分:3)
Spring数据休息专门检测并不导出存储库上的自定义实现。请参阅the reference to the codebase here和the 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的资料。您可能需要实现:
CustomEntityInformation
,CustomEntityMappingContext
,CustomPersistentEntity
,CustomPersistentProperty
。@EnableCustomRepositories
,CustomRepositoriesRegistrar
,CustomRepositoryConfigurationExtension
,CustomRepositoryFactory
,CustomRepositoryFactoryBean
。CustomRepository
(基本界面),CustomRepositoryImpl
(默认实施)。仍然需要一些额外的代码来支持spring-data-rest,例如,搜索资源不会自动公开,因此我们手动构建搜索资源。然后,您可能希望在顶部添加查询支持等。
总结一下,答案是肯定的,可能通过实现自己的存储SPI,但并不容易。首先应该寻找其他解决方案,包括: