【发布时间】:2016-11-08 13:35:02
【问题描述】:
试图获取我的资源文件夹中的 JSON 文件的路径,但使用 getResource().getPath() 未能这样做。我希望以尽可能可靠的方式获取此 URL。
public static void initializeFirebase() {
try {
URL url = getResource("google-services.json");
System.out.println(url.getPath());
FirebaseOptions options = new FirebaseOptions
.Builder()
.setServiceAccount(new FileInputStream(url.getPath()))
.setDatabaseUrl("https://XXXXX.firebaseio.com/")
.build();
FirebaseApp.initializeApp(options);
} catch (IOException e) {
e.printStackTrace();
}
}
上面的函数打印:
/Users/username/Documents/Spring_Project/springbackend/build/resources/main/google-services.json 在抛出错误之前:
Exception in thread "main" java.lang.RuntimeException: Failed to read service account
at com.google.firebase.FirebaseOptions$Builder.setServiceAccount(FirebaseOptions.java:82)
at live.cibc.labs.springbackend.SpringbackendApplication.initializeFirebase(SpringbackendApplication.java:188)
at live.cibc.labs.springbackend.SpringbackendApplication.main(SpringbackendApplication.java:61)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
Caused by: org.json.JSONException: JSONObject["project_id"] not found.
显然它找不到我的 project_id,因为我的 google-services.json 在 src/main/resources/google-services.json 下。
我应该如何获取路径尽可能健壮的方式?
google-services.json
{
"project_info": {
"project_number": "XXXXXXXX",
"firebase_url": "https://XXXXXX.firebaseio.com",
"project_id": "XXXX-XXX",
"storage_bucket": "XXXXXXXX.appspot.com"
},
"client": [
{
"client_info": {
"mobilesdk_app_id": "1:XXXXXXXXX:android:XXXXXXX",
"android_client_info": {
"package_name": "my.spring.project"
}
},
"oauth_client": [
{
"client_id": "XXXXX-XXXXX.apps.googleusercontent.com",
"client_type": 3
}
],
"api_key": [
{
"current_key": "XXXXXX"
}
],
"services": {
"analytics_service": {
"status": 1
},
"appinvite_service": {
"status": 1,
"other_platform_oauth_client": []
},
"ads_service": {
"status": 2
}
}
}
],
"configuration_version": "1"
}
【问题讨论】:
-
您的
google-services.json只是在您的类路径的根目录中。当您的应用程序运行时,不再有src/main/resources。您正在使用 Spring,然后使用它。只需使用Resource res = new ClassPathResource("google-services.json")即可获得。然后在需要时执行res.getInputStream()。不要试图自己做这些事情。你也可以@AutowireResourceLoader和Resource res=resourceLoader.getResource("classpath:/google-services-json");并按照前面提到的那样继续。 -
resourceLoader.getResource("classpath:/google-services-json");和resourceLoader.getResource("google-services-json");都返回 null -
当然...您可能想检查该代码,而不是复制粘贴(我们也会出错)...这显然不是您的文件名...
-
如果您指的是
google-services-json,我确实修改了您的错误,但无济于事。getResource("google-services.json")为空,getResource("classpath:/google-services.json");抛出 JSON 读取失败异常 -
那么它确实存在并且您的 JSOn 不是您的 API 所期望的。如果文件不存在,则为
null。