SpringBoot 在接口代码中获取静态资源的方法

我们知道 SpringBoot 中,默认静态文件可以放到如下路径(默认配置在 ResourceProperties 类中):

  • classpath:/resources/

  • classpath:/static/

  • classpath:/public/

  • classpath:/META-INF/resources/

  • ServletContext 下的路径

如图:

1578468894746

它们分为两类:一类是 classpath 下的资源,一类是 Servlet 上下文下的资源。

在接口代码中,如果是 classpath 下的资源可以使用 ClassPathResource 类寻找:

1
2
3
4
5
6
7
8
9
@GetMapping("/")
@ResponseBody
public String demo(HttpServletRequest request, HttpServletResponse response) throws Exception {
ClassPathResource classpathResource = new ClassPathResource("/static/test.js");
File classpathFile = classpathResource.getFile();
String str = FileUtils.readFileToString(classpathFile);
// do something
return str;
}

如果是 Servlet 上下文的资源,则可直接使用 ServletContext 找到:

1
2
3
4
5
6
7
8
9
@GetMapping("/")
@ResponseBody
public String demo(HttpServletRequest request, HttpServletResponse response) throws Exception {
URL url = request.getServletContext().getResource("/app.js");
File file = ResourceUtils.getFile(url);
String str = FileUtils.readFileToString(file);
// do something
return str;
}