All Downloads are FREE. Search and download functionalities are using the official Maven repository.

dev.struchkov.godfather.main.domain.jackson.TelegramPayloadDeserializer Maven / Gradle / Ivy

There is a newer version: 1.3.1
Show newest version
package dev.struchkov.godfather.main.domain.jackson;

import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
import dev.struchkov.haiti.utils.container.ContextKey;

import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

public class TelegramPayloadDeserializer extends StdDeserializer> {

    public TelegramPayloadDeserializer() {
        super(HashMap.class);
    }

    @Override
    public Map deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException {
        Map resultMap = new HashMap<>();
        JsonNode rootNode = jsonParser.getCodec().readTree(jsonParser);

        Iterator> fieldsIterator = rootNode.fields();
        while (fieldsIterator.hasNext()) {
            Map.Entry fieldEntry = fieldsIterator.next();
            String keyString = fieldEntry.getKey();
            JsonNode valueNode = fieldEntry.getValue();

            // Разделяем строковое представление ключа на имя класса и значение
            String[] keyParts = keyString.split("@");
            if (keyParts.length != 2) {
                throw new IOException("Некорректный формат ключа: " + keyString);
            }

            String className = keyParts[0];
            String keyValue = keyParts[1];

            Class keyClass;
            try {
                keyClass = Class.forName(className);
            } catch (ClassNotFoundException e) {
                throw new IOException("Не удалось найти класс " + className, e);
            }

            ContextKey contextKey = ContextKey.of(keyValue, keyClass);

            // Десериализация значения
            Object objectValue = jsonParser.getCodec().treeToValue(valueNode, keyClass);
            resultMap.put(contextKey, objectValue);
        }

        return resultMap;
    }

}





© 2015 - 2024 Weber Informatics LLC | Privacy Policy