Spring boot:将 REST 与静态内容分开



我正在使用spring-boot-starter-data-rest和spring-boot-starter-web。 我使用CrudRepository做了一个简单的项目,让spring启动生成其余请求映射。

现在,我想添加一个客户端 - 进行其余调用 - 位于./下。 因此,我尝试使用/api其余调用(并且仅那些!)的路径添加前缀

我已经尝试了以下答案: 如何在 Spring 引导中为所有控制器指定前缀? 使用应用程序属性文件中的设置

  • server.contextPath=/api/*
  • spring.data.rest.basePath=/api/*.

但静态内容(例如索引.html、*.js、*.css)仍然没有使用 ./获取。网址也以"/api/"为前缀。 其余调用在/api/foos 下正确提供。

有没有办法告诉 spring 不要将导致位于 src/main/resources/public 中的源代码的 url 视为"rest-controllers"?

更新

设置
属性spring.data.rest.basePath=/api/*
可以完美地工作。 (我的沙箱中仍然有一个覆盖此设置的编程 bean 配置)。

Spring 控制器是为同时提供 HTML 和 JSON/XML 而设计的。第一个是通过Spring MVC视图和一些模板引擎(如Thymeleaf)完成的,后者完全由Spring和@RestController处理。

不可能只为返回 JSON 或 XML 数据的控制器提供上下文路径,而不能为其他控制器提供上下文路径,这也适用于静态内容。您通常要做的是有一些静态变量,其中包含您想要的 API 前缀,以及在控制器@RequestMapping中使用它。即

@RestController
@RequestMapping(MyConstants.API_LATEST + "/bookings")
public class MyBookingsController {
...
}

无论如何,您可能希望通过这些思路来解决前缀问题。在进行重大更改时,通常必须支持较旧的 API 版本,至少在一段时间内是这样。

相关内容

  • 没有找到相关文章

最新更新