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

Gson序列化Firebase Admin SDK Message类时@Key注解不生效如何处理

问题根因

Firebase Admin SDK中Message类标注的@Key是谷歌API客户端工具包自带的自定义注解(全类名com.google.api.client.util.Key),既不是Gson默认识别的@SerializedName,也不是Jackson默认识别的@JsonProperty。你直接初始化的默认Gson、ObjectMapper实例没有配置对该注解的识别规则,因此序列化时直接读取字段名作为key,导致androidConfig字段没有被替换为预期的android。

解决方案

Gson 序列化解决方案

方案1:自定义Gson字段命名策略(推荐,侵入性最低)

给Gson实例配置自定义命名策略,主动识别@Key注解的值作为序列化key:

import com.google.api.client.util.Key;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

// 构建识别@Key注解的Gson实例
Gson gson = new GsonBuilder()
    .setFieldNamingStrategy(field -> {
        Key keyAnnotation = field.getAnnotation(Key.class);
        if (keyAnnotation != null) {
            return keyAnnotation.value();
        }
        return field.getName();
    })
    .create();

// 序列化结果就会符合预期
String m = gson.toJson(message);

方案2:直接使用Firebase SDK自带的序列化工具

Firebase Admin SDK内部已经封装了适配@Key注解的序列化逻辑,不需要额外配置:

import com.google.api.client.json.JsonFactory;
import com.google.firebase.internal.Utils;

JsonFactory jsonFactory = Utils.getDefaultJsonFactory();
String m = jsonFactory.toString(message);

Jackson(ObjectMapper)序列化解决方案

自定义注解解析器,让Jackson识别@Key注解作为序列化key:

import com.fasterxml.jackson.databind.PropertyName;
import com.fasterxml.jackson.databind.introspect.Annotated;
import com.fasterxml.jackson.databind.introspect.JacksonAnnotationIntrospector;
import com.google.api.client.util.Key;

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setAnnotationIntrospector(new JacksonAnnotationIntrospector() {
    @Override
    public PropertyName findNameForSerialization(Annotated a) {
        Key key = a.getAnnotation(Key.class);
        if (key != null) {
            return PropertyName.construct(key.value());
        }
        return super.findNameForSerialization(a);
    }
});

// 序列化结果符合预期
String m = objectMapper.writeValueAsString(message);

内容的提问来源于stack exchange,提问作者GYUHO CHOI

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 18:48:01