一尘不染

Spring Boot访问静态资源缺少SCR /主/资源

spring

我正在开发一个Spring Boot应用程序。我需要在开始时解析XML文件(countries.xml)。问题是我不知道将其放在哪里才能访问它。我的文件夹结构是

ProjectDirectory/src/main/java
ProjectDirectory/src/main/resources/countries.xml

我的第一个想法是将其放在src / main / resources中,但是当我尝试创建File(countries.xml)时,我得到了NPE,并且stacktrace显示我的文件在ProjectDirectory中查找(所以src / main / resources /未添加)。我尝试创建File(resources / countries.xml),路径看起来像ProjectDirectory / resources / countries.xml(因此再次未添加src / main)。

我尝试添加此没有结果

@Override
public void addResourceHandlers(final ResourceHandlerRegistry registry) {
    registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
    registry.setOrder(Ordered.HIGHEST_PRECEDENCE);
    super.addResourceHandlers(registry);
}

我知道我可以手动添加src / main /,但是我想了解为什么它无法正常工作。我还尝试了使用ResourceLoader的示例-没有结果。

任何人都可以提出问题所在吗?

更新: 仅供以后参考-构建项目后,我在访问文件时遇到问题,因此我将File更改为InputStream

InputStream is = new ClassPathResource("countries.xml").getInputStream();

阅读 358

收藏
2020-04-19

共1个答案

一尘不染

只需使用Spring类型的ClassPathResource即可。

File file = new ClassPathResource("countries.xml").getFile();

只要该文件在类路径中的某个位置,Spring就会找到它。这可以src/main/resources在开发和测试期间。在生产中,它可以是当前运行目录。

编辑: 如果文件位于胖JAR中,则此方法不起作用。在这种情况下,你需要使用:

InputStream is = new ClassPathResource("countries.xml").getInputStream();
2020-04-19