首页 > 解决方案 > 对象映射器 | 动态映射

问题描述

我在我的项目中遇到了一个问题:我有 3 个类(B、C、D),它们都扩展了另一个类(A),我想要一个将字符串映射到这 3 个类之一的方法。

我想出了以下解决方案:

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

但它在运行时不起作用。

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

我错在哪里?你遇到过类似的问题吗?你是怎么处理的?

顺便说一句,我只是在学习泛型,我想在这里使用它而不是使用“Object theClass”,但它没有将字母T识别为泛型。

Ps 如果有任何帮助,我正在使用 Spring Boot。

提前感谢大家的帮助!

标签: javaspringgenericsobjectmapper

解决方案


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

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

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

MyClass myClass = (Myclass) this.mapDynamicallyToObject(theString, MyClass.class);

推荐阅读