繁体   English   中英

我应该如何为 Google Storage object 创建自定义解串器?

[英]How should I create a custom deserializer for Google Storage object?

如果我不创建自定义工厂,这就是错误

无法为接口 com.google.cloud.storage.Storage 调用无参数构造函数。 使用 Gson 为此类型注册 InstanceCreator 可能会解决此问题。

这是我的带有自定义工厂的数据转换器的代码

import com.google.cloud.storage.Storage;
 /**
 * Helper for working with JsonDataConverter for Random service.
 */
public class RandomServiceJsonDataConverterHelper {

    /**
     * Creates json data converter.
*/
        public static JsonDataConverter createWorkflowServiceJsonDataConverter() {
            return new JsonDataConverter(RandomServiceJsonDataConverterHelper::registerFactories);
        }
    
        private static GsonBuilder registerFactories(GsonBuilder gsonBuilder) {
            return gsonBuilder.registerTypeAdapter(Storage.class, new StorageDeserialiser());
        }
    }

这是存储解串器的代码

public class StorageDeserialiser implements JsonDeserializer<Storage>, JsonSerializer<Storage> {

    @Override
    public Storage deserialize(
        JsonElement jsonElement,
        Type type,
        JsonDeserializationContext jsonDeserializationContext
    ) {
        //what should i do here ?
    }

    @Override
    public JsonElement serialize(Storage storage, Type typeOfSrc, JsonSerializationContext context) {
        Gson gson = new Gson();
        return new JsonPrimitive(gson.toJson(storage));
    }
}

带有评论的部分是我必须为存储 object 添加反序列化器的地方。有人可以帮我解决这个问题吗?

您不应该尝试序列化授权服务 object,因为它是一个功能接口并且不保存数据。 存储 object 用于创建授权服务 object ,其中对象是 GCS 用于保存数据的原语。 必须为每个服务创建存储 object,该接口用于获取和设置对象。 如果有人希望共享服务 object,那么他们正在寻找的概念是依赖注入,它允许他们跨逻辑范围共享单个 object,但在同一应用程序/环境中。

您应该遵循“上传对象” ,他们可以调用 storage.createFrom 并输入一个 ByteArrayInputStream,它可以包含 JSON 字符串而不是 String content = "Hello world." 在示例中使用。

GCS 对象不需要自定义反序列化器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM