让我的 SPA 使用 Spring 后端 API 的最简单方法是使用 2 个不同的控制器:一个用于 SPA 的根索引页面,另一个控制器用于管理各种 RESTful API 端点:
这是我的两个控制器:
MainController.java
@Controller
public class MainController {
@RequestMapping(value = "/")
public String index() {
return "index";
}
}
MonitoringController.java
@RestController
@RequestMapping(value = "api")
public class MonitoringEndpoints {
@GetMapping(path = "/health", produces = "application/hal+json")
public ResponseEntity<?> checkHealth() throws Exception {
HealthBean healthBean = new HealthBean();
healthBean.setStatus("UP");
return ResponseEntity.ok(healthBean);
}
}
请注意 API 端点控制器如何使用“@RestConroller”注解,而主控制器如何使用“@Conroller”注解。这是因为 Thymeleaf 如何利用它的 ViewResolver。见:
Spring Boot MVC, not returning my view
现在继续把你的 index.html 页面放在 src/main/resources/templates/index.html 因为 Spring 默认在这个位置寻找你的 html 页面。
我的 index.html 页面如下所示:
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head lang="en">
<meta charset="UTF-8"/>
<title>EDP Monitoring Tool</title>
</head>
<body>
<!-- Entry point to our ReactJS single page web application -->
<div id="root"></div>
<script type="text/javascript" src="built/bundle.js"></script>
</body>
</html>
不确定您是如何连接前端的,无论是 ReactJS 应用还是其他什么,但我相信这些信息会对您有所帮助。让我知道我是否可以为您回答其他问题。
另外,如果你使用 Webpack,你可以通过 entry 键下的 webpack.config.js 文件来设置你的 JS 文件的入口点,如下所示:
entry: ['./src/main/js/index.js']