У меня была такая же проблема. Вы должны использовать «открытые» классы. Но это не поможет вам с классами данных, потому что вы не можете сделать их «открытыми».
Существует плагин под названием «все открыто», где вы можете определять аннотации. Если вы используете эти аннотации, классы становятся «открытыми», даже классы данных.
Плагин spring-kotlin использует плагин "all-open" под капотом, поэтому аннотации Spring, такие как @Service, @Component и т. Д., Делают классы открытыми для AOP, потому что проксирование требует от вас наследования от классов.
Если вы используете плагин spring-kotlin, есть хорошая аннотация, которая имеет смысл для вашей проблемы, она используется в Spring Cache, его имя @Cacheable.
Если вы используете @Cacheable в своих классах, они станут открытыми и сохранят свою информацию о типе в json (например: {@class: "com.example.MyClass", ...}), когда вы включите этот код:
val objectMapper =
ObjectMapper()
.registerModule(KotlinModule())
.registerModule(JavaTimeModule())
.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY)
val serializer = GenericJackson2JsonRedisSerializer(objectMapper)
Подробнее: https://kotlinlang.org/docs/reference/compiler-plugins.html
Коротко: Вам не нужно ничего делать, кроме как добавлять аннотацию @Cacheable к нужным классам, и она по своему смыслу подходит также для IMO.