【问题标题】:Add another UrlHandlerMapping to Spring data rest将另一个 Url 处理程序映射添加到 Spring 数据休息
【发布时间】:2014-10-17 14:46:05
【问题描述】:

我有一个普通的 spring-mvc 项目,并且我还在构建一个 rest 模块作为单独的 jar 文件。目标是当我的类路径中有rest jar 时,将普通网站映射到/,并将spring-data-rest 存储库映射到/rest。对于rest 模块,我定义了RepositoryRestMvcConfigurationWebApplicationInitializer,一切正常。

所以现在我想在rest 模块中添加更多URLs(如/synchronize/authenticate 等),但只要我在rest 模块中添加控制器,它们就是由父应用程序上下文(网站/)拾取。我尝试在RepositoryRestMvcConfiguration 中将它们指定为bean,但它们仍然被另一个父上下文拾取,并且父上下文的过滤器被触发。当我通过/rest 访问 spring-data-rest 时,不会触发任何过滤器。

所以我想知道:有没有我可以在 RepositoryRestMvcConfiguration 中覆盖的方法,以便我可以添加额外的 url 处理程序映射?

【问题讨论】:

    标签: spring-data-rest


    【解决方案1】:

    我假设您的意思是希望将另一个控制器作为 Spring Data REST 根超媒体的一部分进行广告宣传。

    为此,您需要在您的应用中创建另一个类,如下所示:

    @Component
    class DogifierResourceProcessor implements ResourceProcessor<RepositoryLinksResource> {
        @Override
        public RepositoryLinksResource process(RepositoryLinksResource objects) {
            objects.add(new Link(ServletUriComponentsBuilder.fromCurrentRequest()
                    .build()
                    .toUriString()
                    .concat("dogifier/{id}"), "dogifier"));
            return objects;
        }
    }
    

    这将创建一个带有 rel="dogifier" 的超媒体条目,其中将 /dogifier/{id} 列为 URI。它还将为其添加正确的 URN 等前缀。

    当然,您可以使用 Spring HATEOAS 到 link to a controller method,而无需手动指定实际路径。这将减少维护并鼓励更好的超媒体控制。

    【讨论】:

    • 嗨 Greg,这太好了 - 我可以将控制器添加到 SDR 根 JSON。但是,我的问题更多是关于如何跳过 /frontend 上的过滤器。所以我在 /frontend 有一个 WAR 应用程序,它定义了一些过滤器。war 包括我在 WEB-INF/lib 中的 rest.jar 和 rest.jar 包括我的自定义 /dogifier 控制器。例如,当我调用 /frontend/rest/product 时(通过 SDR 公开的产品存储库),过滤器将被跳过。但是,当我调用 /frontend/rest/dogifier (我的自定义控制器)时,不会跳过过滤器。
    • 这是因为 /frontend 扫描包中的 [at]Configuration 然后它在 rest.jar 中找到我的 [at]Configuration 并将控制器添加到父应用程序上下文中(/frontend 中的那个) )。所以我想将我的控制器添加到 SDR 但这样我就可以跳过 /frontend 中定义的过滤器
    【解决方案2】:

    您需要从父上下文的类路径扫描中排除这些控制器。只需按照 Spring 文档中的 instructions 操作即可。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-23
      相关资源
      最近更新 更多