如何将 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 thymeleaf自动配置文件
spring boot 如何将没有注解的类@Autowired