2016-02-11 5 views
0

Мне нужно развязать строку json классу с использованием дженериков во время выполнения. Что-то вроде:jackson: как размонтировать класс с использованием дженериков во время выполнения?

String classname = "this.is.a.class.name.read.at.runtime"; 
Class cls = Class.forName(classname); 
mapper.readValue(jsonPayload, new TypeReference<GenericClass<cls>>() {}); 

Очевидно, что вышеуказанный способ не работает, и я не могу найти подходящее решение.

+0

И 'mapper.readValue (jsonPayload, ЦБС);' не работает? – Ralf

+0

Нет, так как мой класс GenericClass , а не cls. – Paolinux

+0

Итак, вы пытаетесь размонтировать экземпляр 'TypeReference', который параметризуется с помощью' GenericClass', который параметризуется каким-то типом? Если это то, чего вы пытаетесь достичь, я не думаю, что это возможно. Информация типа обобщенного класса представляет собой концепцию времени компиляции. Но Джексон нуждается в информации о типе, которую нужно развязать во время выполнения. – Ralf

ответ

0

Следующий код решить мою проблему:

String genericParameterClassName = "this.is.a.class.name.read.at.runtime"; 
Class clazz = Class.forName(genericParameterClassName); 
JavaType = mapper.getTypeFactory().constructParametrizedType(GenericClass.class,GenericClass.class,clazz); 
GenericClass m = mapper.readValue(jsonPayload, type); 
Смежные вопросы