簡體   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