【问题标题】:Spring data rest. How to take repository class through request URI弹簧数据休息。如何通过请求 URI 获取存储库类
【发布时间】:2016-12-09 10:44:32
【问题描述】:

谁能帮帮我。

我的应用程序中有一些基于 Spring Data Rest 的实体和存储库。 现在我编写了自己的 HandlerInterceptor 实现来对每个请求进行预处理,并且我必须知道每个 http 请求将使用哪个存储库。

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

谢谢提前

【问题讨论】:

    标签: spring-data-rest


    【解决方案1】:

    使用 Repositories 类在 spring data-rest 中解析存储库。

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

    您可以使用以下 sn-p 在拦截器中查找给定类的存储库:

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

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

    为此,您只需将 RootResourceInformation 参数添加到 RepositoryRestController 端点方法。

            @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....
         }
    

    【讨论】:

    • 很好的答案!这使我能够为 spring-security-acl 作为子资源实现适当的控制器方法。
    猜你喜欢
    • 1970-01-01
    • 2013-01-13
    • 2018-07-13
    • 2020-01-04
    • 1970-01-01
    • 2018-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多