Десериализовать JSON в общий тип

У меня есть общий класс, который нужно десериализовать из JSON. Как настроить JsonDeserializer в Котлине?

org.springframework.kafka.support.serializer.JsonDeserializer

...

ErrorHandlingDeserializer2(JsonDeserializer(
        MyGenericClass<MyClass>::class.java,  // this throws "Only classes are allowed on the left hand side of a class literal" error
        objectMapper
))

Я нашел решения, например. используя reified, но я не могу применить его к этому Spring Kafka JsonDeserializer.

Стирание типов в Java не позволяет вам иметь Generic<P> подобные структуры. Тип будет только для класса Generic. Вы можете зафиксировать тип, создав необобщенный объект, например. object: TypeReference<Generic<MyClass>> {}. Попробуйте найти что-то подобное в исходниках Kafka, также вы можете использовать reified дженерики Kotlin, чтобы упростить способ создания объектов TypeReference (или подобных) docs.oracle.com/javase/tutorial/java/generics/erasure.html

Eugene Petrenko 19.02.2019 15:07

Спасибо за Ваш ответ. Чтобы быть уверенным, вы хотите расширить/написать мою собственную реализацию JsonDeserializer с поддержкой TypeReference?

Ondřej Míchal 22.02.2019 09:08

Это может сработать, но иногда и срабатывает fastxml.github.io/jackson-core/javadoc/2.0.0/com/fasterxml‌​/…

Eugene Petrenko 22.02.2019 21:08
Как создавать пользовательские общие типы в Python (50/100 дней Python)
Как создавать пользовательские общие типы в Python (50/100 дней Python)
Помимо встроенных типов, модуль типизации в Python предоставляет возможность определения общих типов, что позволяет вам определять типы, которые могут...
0
3
281
0

Другие вопросы по теме