【问题标题】:How can I map a Spring Boot @RepositoryRestResource to a specific url?如何将 Spring Boot @RepositoryRestResource 映射到特定的 url?
【发布时间】:2014-08-25 23:25:48
【问题描述】:

我似乎无法将我的存储库映射到以下位置以外的任何位置:

@RepositoryRestResource(collectionResourceRel = "item", path = "item")
public interface ItemRepository extends PagingAndSortingRepository<Item, Long> {

我认为我可以使用:

 path = "/some/other/path/item"

但映射无法解析。我明白了:

HTTP ERROR 404

Problem accessing /some/other/path/item. Reason:

Not Found

在spring-data javadoc中path定义为:"The path segment under which this resource is to be exported."

我做错了什么?

【问题讨论】:

  • 介意我问你最后做了什么吗?我发现自己的处境和你完全一样。

标签: java spring configuration spring-data spring-boot


【解决方案1】:

我认为 path 属性用于指定路径 segment (所以没有斜杠)。 “/some/other/path”必须是 servlet 路径或上下文路径(即与 Spring Data 无关)。

【讨论】:

  • 是的,但仍然...如何在 /some/other/path/item 中发布此资源?我想,我可以用path 变量来指定它。 发布它的Spring Data,它不应该在哪里可配置吗?
  • 您必须与 Spring Data 开发人员合作。它作为 servlet 资源发布,因此您可以通过更改 servlet 映射以任何您想要的路径进行操作。但是“/”是 URI 中的一个特殊字符,所以如果在 Spring Data 注释的路径属性中被禁止,我不会感到惊讶。为什么重要?
【解决方案2】:

您需要扩展 RepositoryRestMvcConfiguration 并覆盖 configureRepositoryRestConfiguration(RepositoryRestConfiguration config) 以设置您的 baseUri。例如

@Configuration
public class MyRepositoryRestMvcConfiguration extends RepositoryRestMvcConfiguration {

    private static final String MY_BASE_URI_URI = "/my/base/uri";

    @Override
    protected void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) {
        super.configureRepositoryRestConfiguration(config);
        config.setBaseUri(URI.create(MY_BASE_URI_URI));
    }
}

【讨论】:

  • 尽管不受欢迎,但我还是忍不住要加上我的“谢谢!”这里:这节省了很多令人头疼的事情,你会认为 Spring 家伙会将这些信息添加到参考文档(或 Javadoc,甚至源代码......):)
【解决方案3】:

要更改基本 URI,您也可以将其添加到 application.properties:

spring.data.rest.base-path=/my/base/uri

【讨论】:

    【解决方案4】:

    正确的应用程序属性如下: spring.data.rest.base-path=/my/base/path (base-path 而不是base-uri)

    【讨论】:

      【解决方案5】:

      在 Spring Boot 2 中

      @Configuration
      public class RepositoryConfiguration extends RepositoryRestConfigurerAdapter
      {
      
         @Override
         public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config)
         {
            config.setBasePath("/my/base/uri");
         }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-09-05
        • 2019-07-08
        • 2018-08-05
        • 2023-03-21
        • 2016-03-21
        • 2016-09-26
        • 1970-01-01
        • 2022-07-12
        相关资源
        最近更新 更多