使用Gson进行序列化时,如何在Firebase Admin SDK中应用Message类的@Key

cx6n0qe3  于 2022-11-06  发布在  其他
关注(0)|答案(1)|浏览(107)

当用Gson序列化消息类的构建器创建的对象时,我想要得到键名android。
我认为@Key应该得到android,而不是androidConfig,作为序列化的结果,但它不是。同样的情况也适用于Objectmapper和Gson。
我的开发环境是Sping Boot 2.3.12.RELEASE,Firebase ADMIN SDK 8.0.1.,Gson 2.8.8
第一个

vsikbqxv

vsikbqxv1#

默认情况下,Gson只支持它的@SerializedName注解来指定自定义JSON成员名称。
假设您正在使用的@Key注解在运行时可用(@Retention(RUNTIME)),则可以编写一个自定义FieldNamingStrategy

public class KeyFieldNamingStrategy implements FieldNamingStrategy {
    private final FieldNamingStrategy delegate;

    public KeyFieldNamingStrategy(FieldNamingStrategy delegate) {
        this.delegate = delegate;
    }

    @Override
    public String translateName(Field f) {
        Key key = f.getAnnotation(Key.class);
        if (key == null) {
            // No annotation, use delegate
            return delegate.translateName(f);
        } else {
            return key.value();
        }
    }
}

然后将其注册到GsonBuilder

Gson gson = new GsonBuilder()
    // Uses IDENTITY as delegate, which uses field names as is
    .setFieldNamingStrategy(new KeyFieldNamingStrategy(FieldNamingPolicy.IDENTITY))
    .create();

相关问题