非常简短的答案:您正在特定类加载器的范围内寻找属性,而不是目标类。这应该工作:
File file = new File(getClass().getResource("jsonschema.json").getFile());
JsonNode mySchema = JsonLoader.fromFile(file);
另外,请参阅以下内容:
PS:如果项目已在一台计算机上编译,然后在另一台计算机上启动,或者您在Docker中运行应用程序,则可能会出现问题。在这种情况下,资源文件夹的路径可能无效。在这种情况下,最好在运行时确定资源的路径:
ClassPathResource res = new ClassPathResource("jsonschema.json");
File file = new File(res.getPath());
JsonNode mySchema = JsonLoader.fromFile(file);
2020年更新
最重要的是,例如,如果您想在测试中以字符串形式读取资源文件,则可以使用以下静态utils方法:
public static String getResourceFileAsString(String fileName) {
InputStream is = getResourceFileAsInputStream(fileName);
if (is != null) {
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
return (String)reader.lines().collect(Collectors.joining(System.lineSeparator()));
} else {
throw new RuntimeException("resource not found");
}
}
public static InputStream getResourceFileAsInputStream(String fileName) {
ClassLoader classLoader = {CurrentClass}.class.getClassLoader();
return classLoader.getResourceAsStream(fileName);
}
用法示例:
String soapXML = getResourceFileAsString("some_folder_in_resources/SOPA_request.xml");
ClassLoader classLoader = getClass().getClassLoader(); JsonNode mySchema = JsonLoader.getJson(classLoader.getResourceAsStream("jsonschema.json"));