You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SpringBoot集成Firestore获取Timestamp时触发ClassCastException异常

问题根源

你碰到的ClassCastException是因为**java.util.Date和com.google.cloud.Timestamp属于不同类加载器的类型,无法直接强制转换**。结合你的代码,问题出在两处:

  1. 方法声明返回com.google.cloud.Timestamp,但你用document.getDate("created_time")拿到的是java.util.Date,若直接将这个Date转成Timestamp返回,就会触发类型转换异常
  2. 可能混淆了Firestore SDK获取时间戳的正确API,不同版本的SDK对时间字段的处理逻辑有区别
解决办法

根据你要返回com.google.cloud.Timestamp的需求,有两种可行方案:

方案一:直接获取原生Timestamp

如果你的Firestore SDK版本支持,直接用getTimestamp()方法拿到原生的com.google.cloud.Timestamp,跳过类型转换步骤:

public Timestamp getUsers() throws ExecutionException, InterruptedException {
    DocumentReference docRef = firestore.collection("usuarios").document("XHlUdE5516ZT2EEoBBiXvW0De4z1");
    ApiFuture<DocumentSnapshot> future = docRef.get();
    Timestamp result = null;
    
    try {
        DocumentSnapshot document = future.get();
        if (document.exists()) {
            // 直接获取com.google.cloud.Timestamp类型的时间戳
            result = document.getTimestamp("created_time");
            System.out.println("Timestamp: " + result);
        } else {
            System.out.println("Document not found!");
        }
    } catch (InterruptedException | ExecutionException e) {
        e.printStackTrace();
    }
    
    return result;
}

方案二:把Date转换成Timestamp

如果必须用getDate()拿到Date对象,不要直接强制转换,用Timestamp的静态方法fromDate()来完成转换:

public Timestamp getUsers() throws ExecutionException, InterruptedException {
    DocumentReference docRef = firestore.collection("usuarios").document("XHlUdE5516ZT2EEoBBiXvW0De4z1");
    ApiFuture<DocumentSnapshot> future = docRef.get();
    Timestamp result = null;
    
    try {
        DocumentSnapshot document = future.get();
        if (document.exists()) {
            Date date = document.getDate("created_time");
            System.out.println("Date: " + date);
            // 用Timestamp的静态方法完成类型转换
            result = Timestamp.fromDate(date);
        } else {
            System.out.println("Document not found!");
        }
    } catch (InterruptedException | ExecutionException e) {
        e.printStackTrace();
    }
    
    return result;
}
额外提醒
  • 检查你的Firestore SDK依赖版本,确保使用的API与版本匹配(部分旧版本可能没有getTimestamp方法)
  • 不要混淆java.sql.Timestamp和com.google.cloud.Timestamp,这两个是完全不同的类,容易引发类型错误

内容的提问来源于stack exchange,提问作者Pedro Sobral

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 12:50:14