您可以通过定义一个实现Repository的中间通用接口并公开(例如)所有带有PatchAndSortingRepository方法的方法来实现此目的。
@RestController(exported = false).
在该资源的帮助下:https : //spring.io/blog/2011/07/27/fine-tuning-spring-data-
repositories/,这是我的解决方案:
首先,将RepositoryDetectionStrategy设置为ANNOTATED,这样公开的唯一存储库就是那些带有@RepositoryRestResource注释的存储库。这可以通过以下方式完成:
@Componentpublic class SpringRestConfiguration extends RepositoryRestConfigurerAdapter {@Overridepublic void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) {config.setRepositoryDetectionStrategy(RepositoryDetectionStrategy.RepositoryDetectionStrategies.ANNOTATED);}}定义您的通用Rest存储库。它必须仅实现为空的Repository接口,而不必实现CrudRepository或PagingAndSortingRepository,因此您可以精确控制将公开的方法,并且公开的方法不依赖于您正在使用或将使用的Spring
Data版本。 。
为了保证非公开,您必须使用@RestResource(exported =
false)每个方法进行注释。这有点烦人,但要一次完成(您可以复制粘贴,我可以使用在CrudRepository和PagingAndSorting中定义的所有te方法):
@RepositoryRestResource@NoRepositoryBeanpublic interface RestRepositoryMethodExportedFalse<T, ID extends Serializable> extends Repository<T, ID> {@RestResource(exported = false)Iterable<T> findAll(Sort sort);@RestResource(exported = false)Page<T> findAll(Pageable pageable);@RestResource(exported = false)<S extends T> S save(S entity);@RestResource(exported = false)<S extends T> Iterable<S> save(Iterable<S> entities);@RestResource(exported = false)T findOne(ID id);@RestResource(exported = false)boolean exists(ID id);@RestResource(exported = false)Iterable<T> findAll();@RestResource(exported = false)Iterable<T> findAll(Iterable<ID> ids);@RestResource(exported = false)long count();@RestResource(exported = false)void delete(ID id);@RestResource(exported = false)void delete(T entity);@RestResource(exported = false)void delete(Iterable<? extends T> entities);@RestResource(exported = false)void deleteAll();}然后,只需在您的最终存储库中扩展自定义的中间存储库,并通过示例唯一覆盖要公开的方法(您会自动完成,因此可以快速完成):
@RestResource(path="questions")public interface QuestionRepository extends RestRepositoryMethodExportedFalse<Question,Long>{@RestResource(exported = true)@OverrideQuestion findOne(Long id);}最好使用将export的默认值设置为false的参数,但是在可行之前,这是我找到的唯一安全方法。



