在JavaSpring中获取资源URL路径

在JavaSpring中获取资源URL路径,java,spring,firebase,path,Java,Spring,Firebase,Path,试图获取资源文件夹中JSON文件的路径,但使用getResource().getPath()无法获取。我想得到这个网址在一个稳健的方式尽可能 public static void initializeFirebase() { try { URL url = getResource("google-services.json"); System.out.println(url.getPath());

试图获取资源文件夹中JSON文件的路径,但使用
getResource().getPath()
无法获取。我想得到这个网址在一个稳健的方式尽可能

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\u 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.
显然它找不到我的项目id,因为我的google-services.json位于
src/main/resources/google services.json

如何获取路径,使其尽可能健壮

google-services.json
如果我正确理解您使用弹簧,那么最好的方法是使用弹簧:

public static void initializefrebase(){
试一试{
Resource googleServicesResource=新类路径资源(“google services.json”);
FirebaseOptions=新的FirebaseOptions
.Builder()
.setServiceAccount(googleServicesResource.getInputStream())
.setDatabaseUrl(“https://XXXXX.firebaseio.com/")
.build();
FirebaseApp.initializeApp(选项);
}捕获(IOE异常){
e、 printStackTrace();
}
}

我的回答真是太愚蠢了!在firebase控制台中,您可以下载2个JSON文件

  • googleservices.json
    用于客户端
  • service account credentials.json
    用于服务器管理SDK(我应该使用的那个)

不要把两者混淆了

您的
google services.json
仅位于类路径的根目录中。应用程序运行时,不再有
src/main/resources
。您使用的是Spring,然后使用它。只需使用
Resource res=new ClassPathResource(“google services.json”)
即可获得它。然后在需要时执行res.getInputStream()。不要试图自己做那些事。您还可以
@Autowire
使用
ResourceLoader
并执行
Resource res=ResourceLoader.getResource(“classpath:/google services json”)并按照前面提到的进行。
resourceLoader.getResource(“classpath:/google-services-j‌​儿子)
resourceLoader.getResource(“google-services-j‌​儿子)两者都返回nullWell当然。。。您可能希望检查代码(我们也会出错),而不是复制粘贴。。。这显然不是你的文件名……如果你指的是
谷歌服务json
,我确实修正了你的错误,但没有用<代码>获取资源(“googleservices.j‌​son“
为null,并且
getResource(“classpath:/googleservices.j​所以‌​n”)
抛出一个JSON无法读取异常,如果它确实存在并且您的JSON不是API所期望的。如果文件不存在,它将是
null
。仍然会遇到相同的问题:
线程“main”java.lang.RuntimeException中的异常:无法读取服务帐户
,原因是:org.json.jsoneException:JSONObject[“project_id”]未找到。
因为找不到该文件,您可以提供json吗?可能是因为它的格式不正确。json密钥已经被引用。发布,尽管这不太可能,考虑到它是直接从我的firebase控制台下载的,没有修改。
{
  "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"
}