如何将 Spring Boot @RepositoryRestResource 映射到特定的 url?

Posted

技术标签:

【中文标题】如何将 Spring Boot @RepositoryRestResource 映射到特定的 url?【英文标题】:How can I map a Spring Boot @RepositoryRestResource to a specific 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."

我做错了什么?

【问题讨论】:

介意我问你最后做了什么吗?我发现自己的处境和你完全一样。 【参考方案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");
   

【讨论】:

以上是关于如何将 Spring Boot @RepositoryRestResource 映射到特定的 url?的主要内容,如果未能解决你的问题,请参考以下文章

如何将自定义凭据传递给 Spring Boot ldap

如何将项目迁移至 Spring Boot 2.0 ?

如何将布局方言添加到spring-boot thymeleaf自动配置文件

spring boot 如何将没有注解的类@Autowired

如何将 Thymeleaf SpringSecurityDialect 添加到 Spring Boot

如何将 Spring Boot 部署到 Cloud Foundry?