java - Spring boot Resource getFile() 不起作用

标签 java spring spring-boot docker

在我的 Spring Boot 项目中,我尝试加载位于 resources 文件夹中的 xml 文件。如果我尝试使用

加载文件
Resource resource= resourceLoader.getResource("classpath:" + filepath);
File tempFile = resource.getFile();

我在 docker 容器中收到以下错误,因为该文件存在于 jar 文件中的 BOOT-INF\classes 文件夹中(打包类型为 jar)

Exception occur while generating mock sso response java.io.FileNotFoundException: class path resource [mock_sso_response.xml] cannot be resolved to absolute file path because it does not reside in the file system: jar:file:/polst-webapp-2.1.5-SNAPSHOT.jar!/BOOT-INF/classes!/mock_sso_response.xml

但是使用 getInputStream 是有效的。

Resource resource= resourceLoader.getResource("classpath:" + MOCK_SSO_RESPONSE_FILE);
InputStream inputStream = resource.getInputStream();

如果有人可以分享这背后的原因,以及是否有更好/替代的方法在 Spring Boot 中加载 xml 文件,那将会非常有帮助。任何帮助将不胜感激

最佳答案

来自 Spring Resource JavaDoc

Throws: FileNotFoundException - if the resource cannot be resolved as absolute file path, i.e. if the resource is not available in a file system

看来 Resource 的实现不支持 getFile() 的使用。通常您需要使用 isFile() 检查资源是否可以通过 getFile() 解析。

关于java - Spring boot Resource getFile() 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60533945/

相关文章:

java - spring boot扫描并注入(inject)外部非spring bean

Java:使用列表从持久性查询语言检索结果

java - Struts2 - 列表键无法解析

java - 基于 Spring mvc Java 的配置不起作用。控制台显示没有错误,但我的 jsp 页面没有显示

java - @Transactional 内的无状态 session

java - 如何在 Spring Rest Controller 中获取发件人的 uri?

intellij-idea - Intellij+Springboot+Thymeleaf+gradle - 自动重载html资源

java - 在 Spring Data JPA 和 Spring Boot 应用程序中启用全局 Hibernate 过滤器

java - 同步方法和同步对象的不同输出

java - 替代加密