在 Spring 引导中从类路径加载嵌套资源

Loading nested resource from the classpath in Spring Boot

Spring 启动 2.1.5.RELEASE 这里。我正在尝试从 src/main/resources/images 目录加载资源。迄今为止我最好的尝试是:

URL url = getClass().getResource("classpath:images/my_logo.png");
if (url == null) {
  log.warn("Hmmm not found...");
} else {
  log.info("Found it!");
}

在运行时警告“Hmmm not found...”正在打印,但文件绝对位于src/main/resources/images/my_logo.png.我哪里出错了?

由于您已经在使用 Spring,请尝试使用他们的资源加载器之一

URL url = new PathMatchingResourcePatternResolver( null ).getResource( "classpath:/images/my_logo.png" ).getURL();

注意:我在路径中添加了一个前导斜杠。

编辑:我查看了@duffymo 的评论,它是正确的。前导斜杠不是必需的。

在Spring中还有另一种获取资源的方法,但是ResourceUtils Javadoc明确指出class主要供内部使用。

String file = ResourceUtils.getFile("images/my_logo.png").getAbsolutePath();

或使用 ClassPathResource

URL clsPath =  new ClassPathResource("images/my_logo.png").getURL();