一尘不染

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

spring-boot

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

现在,我想添加一个客户端-进行其余调用-在 ./* 下运行。因此,我试图用 / api其余调用(以及只有这些!) 的路径添加
前缀
***

我已经尝试了以下答案: 如何在Spring
Boot中为所有控制器指定前缀?
使用application.properties文件中的设置

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

但是仍然不能使用./来获取静态内容(例如index.html,。js,。css)。网址也以“ / api /”作为前缀。其余的调用可以在/ api /
foos下正确地服务。

有没有办法告诉spring不要将导致src / main / resources / public中的源的url视为“ rest-controllers”?

更新资料

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


阅读 281

收藏
2020-05-30

共1个答案

一尘不染

Spring控制器可同时用于HTML和JSON / XML。第一个是通过Spring
MVC视图和Thymeleaf之类的模板引擎完成的,后者完全由Spring和来处理@RestController

没有办法只为返回JSON或XML数据的控制器提供上下文路径,而对于其他控制器也没有,因此也适用于静态内容。通常,您需要做一些静态变量,其中包含您想要API的前缀,并在控制器的中使用该前缀@RequestMapping。即

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

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

2020-05-30