对象映射器|动态映射

时间:2020-03-25 17:38:24

标签: java spring generics objectmapper

我在项目上遇到了一个问题:我有3个类(B,C,D),它们都扩展了另一个类(A),并且我想拥有一个将String映射到这3个类之一的方法

我想出了以下解决方案:

public MySuperclass mapDynamicallyToObject(String stringObject, Object theClass) {
    return new ObjectMapper()
        .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, true)
        .readerFor(theClass.getClass())
        .readValue(stringObject);
}

但是它在运行时不起作用。

通过阅读Oracle的文档,我认为通过使用Object的方法 .getClass(),JVM将能够在运行时确定对象的真实性质并将字符串映射到该对象。

我在哪里弄错了?您是否遇到过类似的问题?您是怎么做到的?

顺便说一句,我只是在学习泛型,我希望在这里使用它而不是使用“ Object theClass”,但是它不认为字母 T 是泛型的

P.s。如果有什么帮助,我正在使用Spring Boot。

在此先感谢大家的帮助!

1 个答案:

答案 0 :(得分:0)

已经有一段时间了,但这是解决方案:

  A - a
 /
S
 \
  B - b

当调用该方法时,它需要强制转换

public Object mapDynamicallyToObject(String stringObject, Class clazz) {
    return new ObjectMapper()
        .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, true)
        .readerFor(clazz)
        .readValue(stringObject);
}