我有以下在内部使用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
}
有什么想法吗?预先感谢。