春季启动时,thymleaf localhost:8080 / script.js与localhost:8080 / {message}冲突,静态资源与@PathParam冲突

时间:2018-10-06 12:01:32

标签: spring-boot

主类-

@SpringBootApplication
@EnableAutoConfiguration
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

控制器类

@Controller
public class GreetingController {

    @GetMapping("/{message}")
    public String greeting(@PathVariable(name="message", required=false) String message, Model model) {
        model.addAttribute("message", message);
        return "greeting";
    }

}

HTML文件

<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head> 
    <title>Getting Started: Serving Web Content</title> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <script src="/script.js"></script>
</head>
<body>
    <p th:text="'Hello, ' + ${message} + '!'" />
</body>
</html>

脚本文件

console.log("hi");

Index.html

<!DOCTYPE HTML>
<html>
<head> 
    <title>Getting Started: Serving Web Content</title> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
    <p>Get your greeting <a href="/greeting">here</a></p>
</body>
</html>

Find Screenshot of Directory Structure here

此外,该项目参考来自https://spring.io/guides/gs/serving-web-content/,并进行了以下修改

  • GreetingController中而不是query param中接受参数 通过path param
  • 将脚本文件添加到/resources/static文件夹
  • greeting.html中添加了一行以包含script file

2 个答案:

答案 0 :(得分:0)

使用此

<script type="text/javascript" src="/script.js"></script>

代替

<link href="/script.js" rel="stylesheet">

答案 1 :(得分:0)

您最好发布完整的home.html文件和完整的Controller类。 要么 尝试使用@PathVariable而不是@PathParam。由于@PathParam仅可与REST一起使用,因此@PathVariable在Spring中使用,因此它可在MVC和REST中使用。