【问题标题】:Spring Boot: Configure a url prefix for RestControllersSpring Boot:为 RestControllers 配置 url 前缀
【发布时间】:2015-06-08 23:12:49
【问题描述】:

我不是 Spring 专家,作为一个黑匣子,我很难自己解决问题,即使有 Spring 的文档也是如此。有时,我只是不知道我在寻找什么才能开始搜索......

在我的 Spring Boot 应用程序中,我试图弄清楚如何为我的所有 RestControllers 配置一个唯一的 url 前缀。

我真正想要的是从根上下文“/”提供我的静态内容,但让我的 RestController 端点可以从不同的上下文访问,比如“/api/*”。

我知道如何通过 application.properties 更改应用程序的默认上下文,但这并不是我想要的。当涉及到 servlet、映射等时,我在这里展示了我的无知,因为我说我试图为两种不同类型的内容获取两种不同的上下文。

【问题讨论】:

  • 为什么使用不同的 URL,而不是使用内容协商从相同的 URL 提供不同的表示形式?
  • 如果您使用的是 Spring Boot 和 Spring Data Rest,那么我建议将此行添加到 application.properties 中:spring.data.rest.basePath=/api

标签: java spring spring-mvc servlets spring-boot


【解决方案1】:

我认为这是一个有效的观点,尽管将其分成两个(或多个应用程序)是很常见的。假设您要处理 (1) 提供 HTML/CSS/JS 的网站和 (2) REST API。在您的控制器之上,您可以使用 @RequestMapping 定义“上下文”(您不能有两个,因此它们将位于不同的控制器中,这取决于您要实现的目标):

  • @RequestMapping(/web)
  • @RequestMapping(/api/v1)

...然后在这些控制器中,在方法中,您可以再次使用@RequestMapping(value = "/index", method = RequestMethod.GET) 分配“URL 的其余部分”。

例如/web/index/web/error;以及:/api/v1/something/api/v1/something-else

有一个好的包约定将帮助你不迷失在这么多的控制器

注意:请记住,您不需要在每个方法中重复相同的上下文,而只是“URL 的其余部分”。

【讨论】:

  • 非常感谢!我希望有一种更全球化的方式来配置它,但我完全可以为控制器提供一条路径,而不仅仅是它的方法。这很有效,而且非常简单。 =)
【解决方案2】:

我不知道它是否有帮助,我只是在另一个线程中发布了我正在测试的解决方案:

How to configure a default @RestController URI prefix for all controllers?

【讨论】:

  • 链接的答案不适用于这种情况,因为它会禁用静态内容的服务,但我已经为没有这个问题的问题添加了一个额外的答案。见stackoverflow.com/questions/34801351/…
猜你喜欢
  • 2016-02-16
  • 2017-04-07
  • 1970-01-01
  • 2018-01-27
  • 2020-12-22
  • 2019-11-01
  • 2015-11-26
  • 1970-01-01
  • 2018-01-17
相关资源
最近更新 更多