使用Rest API将数据持久存储到Firebase

在本教程中,将了解如何连接到Firebase Firestore数据库并使用其余Web服务持久化数据。

为此,将从上一篇博客文章使用Spring Boot和Java构建Restful Web Service的其余Web服务开始。

如果您是视频专家,则此视频演示连接到Firebase并保留数据

转到firebase.google.com,然后单击右上角的“获得控制台”,它将带您进入控制台,如下所示。 单击添加项目并为其命名。

Firebase控制台

创建完成后,将带您进入项目控制台页面,如下所示,单击数据库并创建一个名为“用户”的集合。

替代文字
替代文字

创建集合后,我们将转到项目设置->服务“帐户”标签以生成密钥并将其保存在您的项目中,该密钥将用于连接到Firebase Firestore数据库。 我们还将获取Java的admin SDK配置代码段。

Firebase控制台服务帐户

现在打开pom.xml并添加google firebase admin SDK依赖项

<dependency>
    <groupId>com.google.firebase</groupId>
    <artifactId>firebase-admin</artifactId>
    <version>6.11.0</version>
 </dependency>

添加一个名为FirebaseInitialize的文件,在应用程序启动期间,我们将使用该文件建立与Firebase的连接。 该类看起来像这样。

package com . example . demo . service ;

import java . io . FileInputStream ;

import javax . annotation . PostConstruct ;

import org . springframework . stereotype . Service ;
import com . google . auth . oauth2 . GoogleCredentials ;

import com . google . firebase . FirebaseApp ;
import com . google . firebase . FirebaseOptions ;

@ Service
public class FirebaseInitialize {

    @ PostConstruct
    public void initialize () {
        try {
        FileInputStream serviceAccount =
                  new FileInputStream ( "./serviceAccount.json" );

                FirebaseOptions options = new FirebaseOptions . Builder ()
                  . setCredentials ( GoogleCredentials . fromStream ( serviceAccount ))
                  . setDatabaseUrl ( "https://fir-demo-8920f.firebaseio.com" )
                  . build ();

                FirebaseApp . initializeApp ( options );
    } catch ( Exception e ) {
        e . printStackTrace ();
    }

}
}

@Service Annotation使Spring启动程序知道它是一个服务类,需要绑定。
@PostConstruct Annotation指定函数initialize()应该在启动应用程序之前运行,因此它将创建一个Firebase连接。
我们具有在此处粘贴的较早步骤中从firebase控制台复制的代码。
第一行读取我们在步骤1的Firebase项目设置页面上生成的serviceAccount.json
它使用通过FirebaseOptionsBuilder构建的选项,通过FirebaseApp.initializeApp连接到Firebase ,该选项将具有我们从serviceAccount.json和databaseURL中提取的凭据。

现在,我们将编写一个Firebase Service类,该类将具有以下四个功能来执行分类操作: createUser(创建新用户)updateUser(更新现有用户)getUserDetails(获取用户详细信息)deleteUser(删除现有用户)该类如下所示。

package com . example . demo . service ;

import java . util . concurrent . ExecutionException ;

import org . springframework . stereotype . Service ;

import com . example . demo . objects . Person ;
import com . google . api . core . ApiFuture ;
import com . google . cloud . firestore . DocumentReference ;
import com . google . cloud . firestore . DocumentSnapshot ;
import com . google . cloud . firestore . Firestore ;
import com . google . cloud . firestore . WriteResult ;
import com . google . firebase . cloud . FirestoreClient ;

@ Service
public class FirebaseService {

    public String saveUserDetails ( Person person ) throws InterruptedException , ExecutionException {
        Firestore dbFirestore = FirestoreClient . getFirestore ();
        ApiFuture < WriteResult > collectionsApiFuture = dbFirestore . collection ( "users" ). document ( person . getName ()). set ( person );
        return collectionsApiFuture . get (). getUpdateTime (). toString ();
    }

    public Person getUserDetails ( String name ) throws InterruptedException , ExecutionException {
        Firestore dbFirestore = FirestoreClient . getFirestore ();
        DocumentReference documentReference = dbFirestore . collection ( "users" ). document ( name );
        ApiFuture < DocumentSnapshot > future = documentReference . get ();

        DocumentSnapshot document = future . get ();

        Person person = null ;

        if ( document . exists ()) {
            person = document . toObject ( Person . class );
            return person ;
        } else {
            return null ;
        }
    }

    public String updateUserDetails ( Person person ) throws InterruptedException , ExecutionException {
        Firestore dbFirestore = FirestoreClient . getFirestore ();
        ApiFuture < WriteResult > collectionsApiFuture = dbFirestore . collection ( "users" ). document ( person . getName ()). set ( person );
        return collectionsApiFuture . get (). getUpdateTime (). toString ();
    }

    public String deleteUser ( String name ) {
        Firestore dbFirestore = FirestoreClient . getFirestore ();
        ApiFuture < WriteResult > writeResult = dbFirestore . collection ( "users" ). document ( name ). delete ();
        return "Document with ID " + name + " has been deleted" ;
    }
}

我们还将用@Service注释定义此类,以便可用于自动接线。
由于已提前初始化了与数据库的连接,因此我们将在此处提取数据库以对该数据库执行操作。

Firestore dbFirestore = FirestoreClient.getFirestore();

这将实例化我们将用于访问创建的集合的firestore客户端对象。

ApiFuture collectionsApiFuture = dbFirestore.collection("users").document(person.getName()).set(person)

这行语法获取集合“ users”,并尝试使用id记录文档(在本例中,我将id设置为用户名),如果找不到指定id的文档,它将使用Person创建新文档宾语。
如果已经存在一个ID,它将更新文档;如果您观察到updateUser函数,它将具有与createUser相同的逻辑。
对于deleteUser ,语法为

dbFirestore.collection("users").document(person.getName())

如果您在学习本教程时遇到问题,请观看以下视频,该视频演示了完整的教程。

From: https://dev.to/nagarajendra/persist-data-to-firebase-with-rest-api-217n

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值