ObjectMapper-反序列化展平对象

时间:2018-11-20 19:00:00

标签: java kotlin jackson objectmapper

我有以下在内部使用HashMap的类:

open class I18n<T> {

    var i18n: MutableMap<LanguageEnum, T?> = mutableMapOf()
        @JsonAnyGetter get

    fun add(lang: LanguageEnum, value: T?) {
        i18n[lang] = value
    }

    // ...
}

感谢@JsonAnyGetter注释,当我将其序列化为Json时,我具有以下格式:

{
    "pt": "Texto exemplo",
    "en": "Example text"
}

代替

{
    i18n: {
        "pt": "Texto exemplo",
        "en": "Example text"
    }
}

现在我需要退路了。我有一个包含语言关键字的HashMap,我需要将其反序列化为我的I18n对象。

这里的警告是,我正在大量的反射和抽象中进行此操作,如果它可以像这样工作,那将非常好:

// Here I am going through the fields of a given POJO. 
// One of those fields is a I18n type. 
// My model variable is a Map containing the same keys as my POJO field's name, so I'm basically trying to map them all
for (f in fields) {
    if (model.containsKey(f.name)) {

        // when f.type is I18n, value is a HashMap<string, string>
        val value = model[f.name]
        f.isAccessible = true

        // when f.type is I18n.class, the field is set to an empty instance of I18n because it could not desserialize
        f.set(dto, mapper.convertValue(value, f.type))
        f.isAccessible = false
    }
}

我不想做类似的事情:

if (f.type === I18n.class) {
    // Special treatment
}

有什么想法吗?预先感谢。

0 个答案:

没有答案