spring 引导:将 REST 与静态内容分开

spring boot: separate REST from static content

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

现在,我想添加一个客户端 -- 进行其余调用 -- 在 ./ 下进行。 因此,我正在尝试 prefix rest 调用的路径(而且只有那些!)/api.

我试过以下答案: 使用 application.properties 文件中的设置

但静态内容(例如 index.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.

处理

没有办法只为 returns JSON 或 XML 数据的控制器设置上下文路径,其他控制器也没有,这也适用于静态内容。你通常做的是有一些静态变量,其中包含你想要的 API 的前缀,以及在控制器的 @RequestMapping 中的使用。即

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

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