我正在尝试使用 Spring Boot 重写我的配置繁重的普通 Spring MVC 项目。我使用 Spring Boot Initiaizer 在 IntelliJ 中启动了一个全新的 Spring Boot 项目,并且我将采用基于 Java 的最小配置的路线。许多教程指出,生成的默认主类就足够了,而且 @SpringBootApplication
包含所有内容。我得到了一个示例 REST 控制器来工作并将一个序列化对象作为 JSON 返回,但似乎要显示一个视图是很困难的。我的结构如下,除了我创建的 webapps 目录之外的所有内容都是默认的。
src
`-main
`-java
`-resources
`-static
`-templates
`-webapp
`-WEB-INF
`-home.jsp
控制器很简单。
@Controller
public class ViewMaster {
@RequestMapping("/home")
public String home() {
return "home";
}
}
没有任何配置,我想知道 Spring Boot 期望视图存储在哪里以及使用什么扩展名(html?)。我还尝试在 application.properties
中包含以下内容,但仍然出现 404 错误。移动 WEB-INF 目录或仅移动资源中的 html 文件也无济于事。
spring.mvc.view.prefix=/WEB-INF/
spring.mvc.view.suffix=.jsp
我也尝试在我的 pom.xml 中包含这些依赖项,但没有任何效果。
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
我一定在这里遗漏了一些非常明显的东西,如果有人能指出这一点,我将不胜感激!
原文由 ystan- 发布,翻译遵循 CC BY-SA 4.0 许可协议
解决方案
我通过反复试验找到了答案,结果很烦人。如果这个结论是错误的,我希望有人能纠正我,但似乎 Spring Boot 不喜欢字符串
WEB-INF
。我将WEB-INF
目录重命名为view
并将 ---application.properties
--- 更改为以下内容并成功加载视图。其他发现
本练习的目的是创建一个基于 Java 的 最小 配置的工作示例,因此我继续最小化设置。然后我发现在多个 SO 线程和论坛上提出的许多建议并没有帮助。 @JBNizet 在他对 Spring Boot 文档的评论中提供了一个链接,该链接列出了一个没有人提到的非常突出的点: JSP 根本不能很好地与 Spring Boot 配合使用,因为它有一些限制,具体取决于所选的嵌入式容器。考虑到这一点,我决定尝试用 ThymeLeaf 模板替换 JSP。
我的新工作配置消除了对这些的需求:
application.properties
:spring.mvc.view.prefix
+spring.mvc.view.suffix
org.springframework.boot / spring-boot-starter-tomcat
org.springframework.boot / tomcat-embed-jasper
javax.servlet / jstl
因此,只需将默认的 Spring Boot 模板和 2 个 ThymeLeaf 依赖项与视图命名为
ViewName.html
放在src/main/resources/templates
中。