Spring数据休息。如何通过请求URI获取存储库类

时间:2016-12-09 10:44:32

标签: spring-data-rest

任何人都可以帮助我。

我的应用程序中有一些基于spring数据休息的实体和存储库。 现在我编写了自己的HandlerInterceptor实现来做preHandling每个请求,我必须知道每个http请求将使用哪个存储库。

Ofc我可以为每个存储库制作单独的拦截器,但这个解决方案不灵活任何想法?

提前预付款

1 个答案:

答案 0 :(得分:1)

使用Repositories类在Spring数据休息中解析存储库。

repositories类公开了一个帮助器方法(getRepositoryFor(Class<?>)),用于查找给定类的存储库。

您可以使用以下代码段在拦截器中查找给定类的存储库:

Repositories repositories = new Repositories(appContext);
repositories.getRepositoryFor(entityObject.getClass());

更优雅的解决方案是利用内置的spring-data-rest存储库查找实现和自定义控制器(RootResourceInformationHandlerMethodArgumentResolver)

为此,您只需要在RepositoryRestController端点方法中添加RootResourceInformation参数。

        @RepositoryRestController
        @RequestMapping("/customName")
        public class RepositoryExportController {

        @Autowired
        private ApplicationContext appContext;

        @RequestMapping(method = RequestMethod.GET, value = "{repository}",
                    produces = MediaTypes.HAL_JSON_VALUE)
        @ResponseBody
            public Resources<Resource<?>> export(RootResourceInformation resourceInformation, ...) {

         Repositories repositories = new Repositories(appContext);

         CrudRepository repo=(CrudRepository)repositories.getRepositoryFor(resourceInformation.getDomainType());

          repo.findAll();
         ...other logic....
     }