Bootstrap 3样式无法通过Spring Boot和WebJars加载

时间:2019-06-16 22:12:46

标签: spring-boot thymeleaf webjars

我在Spring Boot项目(使用2.1.15版)中添加了以下依赖项:

 <dependency>
    <groupId>org.thymeleaf</groupId>
    <artifactId>thymeleaf</artifactId>
    <version>3.0.11.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.webjars</groupId>
    <artifactId>bootstrap</artifactId>
    <version>3.3.7-1</version>
</dependency>
<dependency>
    <groupId>org.webjars</groupId>
    <artifactId>jquery</artifactId>
    <version>3.2.1</version>
</dependency>

在Thymeleaf页面上,我包括以下CSS文件和脚本:

<link rel="stylesheet" th:href="@{/webjars/bootstrap/3.3.7-1/css/bootstrap.min.css}">

<script th:src="@{/webjars/bootstrap/3.3.7-1/js/bootstrap.min.js}" type="text/javascript"></script>
<script th:src="@{/webjars/jquery/3.2.1/jquery.min.js}" type="text/javascript"></script>

要加载模板,我定义了以下控制器映射:

@RequestMapping(name = "/")
public String loadMainWeb() {
    return "index";
}

但是,当我运行应用程序时,Bootstrap样式没有加载。我通过将btnbtn-primary类添加到按钮进行了测试。为什么这些样式无法加载?

完整项目可在GitHub上找到。

1 个答案:

答案 0 :(得分:1)

问题在于您的控制器映射。您当前正在使用以下映射:

@RequestMapping(name = "/")
public String loadMainWeb() {
    return "index";
}

但是,您使用name属性代替了path注释上的@RequestMapping属性。通过舍弃path属性,您实际上告诉Spring您想将此控制器映射应用于所有端点。

这意味着在运行应用程序时,实际上是在尝试加载WebJars文件时正在加载index.html页面。

要解决此问题,您应该使用path代替name

@RequestMapping(path = "/") // Use 'path'
public String loadMainWeb() {
    return "index";
}