首页 > 解决方案 > 在 Firebase Admin SDK 之上创建 REST API 控制器

问题描述

我正在尝试在Firebase admin sdk之上构建 REST API 控制器(使用 spring boot 框架),但我面临以下问题:

假设,如果我收到一个GET请求,它需要从Firebase 实时数据库中读取数据并作为该GET请求的响应返回。只能使用异步侦听器从Firebase 实时数据库读取数据,所以我该如何实现:

标签: javafirebasespring-bootasynchronousfirebase-admin

解决方案


类似这样的东西应该可以工作:

    final CountDownLatch latch = new CountDownLatch(1);
    final AtomicReference<Object> value = new AtomicReference<>(null);
    final AtomicReference<Exception> exception = new AtomicReference<>(null);

    ref.getReference().addListenerForSingleValueEvent(new ValueEventListener() {
      @Override
      public void onDataChange(DataSnapshot snapshot) {
        value.set(snapshot.getValue());
        latch.countDown();
      }

      @Override
      public void onCancelled(DatabaseError error) {
        exception.set(error.toException());
        latch.countDown();
      }
    });

    latch.await(30, TimeUnit.SECONDS);
    if (exception.get() != null) {
      // handle error
    }

    Object result = value.get();
    // return result to user

我建议将所有同步逻辑(使用锁存器和原子引用)移动到一个新的可重用类中,这样代码就变得简单且更具可读性。


推荐阅读