我正在与thymeleaf建立一个springboot项目。从Eclipse中运行时,项目将按预期运行。即我可以访问百里香叶中的模型属性。
但是,当我将上述项目打包为jar时,thymeleaf无法访问在后端添加的模型属性。
1)后端的Java代码:
@RequestMapping("/")
public String index(Model model) throws Exception {
String headshotsfileNameStrings = "";
InputStream resource = new ClassPathResource("static/images/xyz-headshots/").getInputStream();
try (BufferedReader reader = new BufferedReader(new InputStreamReader(resource))) {
headshotsfileNameStrings = reader.lines().collect(Collectors.joining(","));
}
model.addAttribute("headshotsfileNameStrings", headshotsfileNameStrings);
System.out.println(model);
return "index";
}
编辑1: 我将上面的代码更新为:
try (BufferedReader reader = new BufferedReader(new InputStreamReader(resource))) {
System.out.println(reader.readLine()); //This prints 'null' when running application as a Jar
headshotsfileNameStrings = reader.lines().collect(Collectors.joining(","));
}
2)Thymeleaf前端代码
<script>
var headshotsfileNameStrings = "[[${headshotsfileNameStrings}]]";
</script>
当应用程序作为springboot jar运行时,变量“ headshotsfileNameStrings”具有值“”,而从Eclipse运行时,变量“ headshotsfileNameStrings”具有值“ some_string_here_xyz”。
这可能是怎么回事?我没有看到任何错误,也不知道从哪里开始调试。有什么想法吗?
答案 0 :(得分:0)
我的第一个检查是是否确实找到了文件,您可以放置一个调试点,看看您的资源值是否确实包含您期望的文件。
此外,添加catch子句并打印stacktrace而不是使用select t.*,
max(DateOfData) over () as max_date
from dbo.TMNCS;
,现在,如果此方法出现问题,它会默默地这样做。
此刻我相信会发生的事情是,您没有找到IOException文件,但是您看不到它,因为您没有打印stacktrace。
更新:
我希望“ xyz-headshots”是文件名。如果是这种情况,请添加文件扩展名并删除结尾的“ /”。因此,例如,如果它是文本文件,则其外观应为throws Exception
答案 1 :(得分:0)
此代码在IDE中以及当应用程序以JAR运行时都对我有用:
@RequestMapping("/")
public String index(Model model) {
String headshotsfileNameStrings = "";
ResourceLoader resourceLoader = new DefaultResourceLoader();
Resource[] resources;
try {
resources = ResourcePatternUtils.getResourcePatternResolver(resourceLoader)
.getResources("classpath:" + "/static/images/xyz-headshots/*.jpg"); //get all files in the directory
for (int i = 0; i < resources.length; i++) {
String fileName = resources[i].getFilename(); //fileName gets populated now.
headshotsfileNameStrings += fileName + ",";
}
} catch (Exception e) {
e.printStackTrace();
}
model.addAttribute("headshotsfileNameStrings", headshotsfileNameStrings);
return "index";
}
我从此处列出的答案中寻求帮助:Classpath resource not found when running as jar