我从spring.io阅读了以下文档,它说By default Spring Boot will serve static content from a directory called /static (or /public or /resources or /META-INF/resources) in the classpath
但是当我将index.html文件放在/resources
下时,字符串index
才会被渲染。目前index.html
在webapp下,我正在使用AngularJS。
MvcConfiguration
@Configuration
public class MvcConfig {
@Bean
InternalResourceViewResolver viewResolver(){
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/webapp/");
resolver.setSuffix(".html");
return resolver;
}
}
索引页面的Restful Service
@RestController
public class IndexController {
@RequestMapping("/")
public String index(){
System.out.println("Looking in the index controller.........");
return "index";
}
}
在我的IDE控制台上,我确实看到从IndexController打印的Looking in the index controller......
,在Chrome开发工具的网络下,我只看到localhost 200
。
的index.html
<body>
<!--[if lt IE 7]>
<p class="browsehappy">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</p>
<![endif]-->
<div ng-view></div>
<div>Angular seed app: v<span app-version></span></div>
答案 0 :(得分:29)
如果您的应用程序是,请不要使用src / main / webapp目录 打包成一个罐子。虽然这个目录是一个通用标准,但它 只会与战争包装一起使用,它将被默默地忽略 如果你生成一个jar,大多数构建工具。
Spring Boot非常自以为是,当你不试图抵制默认设置时,它是最好的。我认为您的文件放在/src/main/webapp
中没有任何理由。只需使用/src/main/resources/static
作为前端资产即可。这是最常见的地方。
它将自动从根URI提供这些静态文件,而无需创建任何根级别Controller
。实际上,您的IndexController
会阻止从根URI提供静态前端文件。根本不需要为静态文件创建Controller
。
您的应用也不需要查看解析器。您的应用程序只是单页角度应用程序使用的REST API。所以你的HTML模板是在客户端上。如果您正在进行服务器端HTML模板化(例如使用Thymeleaf或JSP),则需要查看解析器。所以也要删除那件。
答案 1 :(得分:4)
@RestController
public class IndexController {
@RequestMapping("/")
public String index(){
System.out.println("Looking in the index controller.........");
return "index";
}
}
问题在这里,你正在使用@RestController,所以在这种情况下,如果你写“return'index';” spring boot将它覆盖为字符串答案。您需要使用@Controller注释。